Оператор 'in' не работает с кортежами и устанавливает в python - PullRequest
1 голос
/ 18 марта 2020

Если у меня есть два идентичных кортежа:

>>> e = ('a', 1)
>>> c = ('a', 1)
>>> e == c
True
>>> hash(e)
9135824190991152417
>>> hash(c)
9135824190991152417

, но, к моему удивлению:

>>> se = set(c)
>>> e in se
False

, как я могу использовать набор, чтобы проверить, есть ли в нем кортеж?

Ответы [ 2 ]

2 голосов
/ 18 марта 2020

Как видите, e НЕ является элементом se, поэтому in возвращает false

se = {'a', 1}
e = ('a', 1)

Поскольку set() занимает итерацию, и использует его значения для заполнения своей структуры, вы не можете передать свой кортеж таким образом, использовать синтаксис {} или дать список (или кортеж), содержащий ваш кортеж

# {('a', 1)}
se = {c} 
se = set((c,)) 
se = set([c])
0 голосов
/ 18 марта 2020

В вашем примере se = {'a', 1} не {('a',1)} и, следовательно, вы получаете ложь. Чтобы создать набор кортежей, который, я думаю, вам нужен, используйте set([c,]) или {c}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...