Python устанавливает разницу строк - PullRequest
1 голос
/ 23 мая 2019

Я столкнулся со следующим странным поведением при создании различий наборов строк в Python:

set(['a', 'b']) - set(['a'])   # results in {'b'} as expected
set(['a', 'b']) - set('a')     # results in {'b'} as expected
set(['a.', 'b']) - set(['a.']) # results in {'b'} as expected
set(['a.', 'b']) - set('a.')   # surprisingly results in {'a.', 'b'}!

Почему в последнем случае «а»? не вычитается из набора? Поскольку разница между вторым и четвертым случаем - это точка, я считаю, что это виновник. Использование двойных кавычек дает такое же поведение.

Ответы [ 2 ]

7 голосов
/ 23 мая 2019

Ваш последний набор интерпретируется как {'a', '.'}.Таким образом, ваша операция set не будет исключать 'a.'

Это потому, что set будет перебирать входные данные, а итерация над строкой будет символом.

3 голосов
/ 23 мая 2019

set('a.') интерпретирует строку как список символов ['a','.], в результате чего {'.', 'a'}

set(['a.', 'b']) интерпретирует список как ['a.', 'b'], в результате чего {'a.', 'b'}

Теперь, когда вы берете разность наборов, результат равен {'a.', 'b'}, поскольку разница наборов первого и второго набора является самим первым набором, поскольку в этих двух наборах нет общих элементов.

Из документов: https://docs.python.org/3/library/stdtypes.html#set-types-set-frozenset

разница (* другие). набор - другое - ...
Вернуть новый набор с элементами в наборе, которых нет в других.

Поведение можно увидеть ниже более четко

In [1]: set('a.')                                                                                                                                                                   
Out[1]: {'.', 'a'}

In [2]: set(['a.', 'b'])                                                                                                                                                            
Out[2]: {'a.', 'b'}

In [3]: set(['a.', 'b']) -  set('a.')                                                                                                                                               
Out[3]: {'a.', 'b'}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...