Оператор "in" не работает должным образом? (python) - PullRequest
1 голос
/ 05 мая 2020

Я новичок в python, когда изучал концепцию операторов. Я застрял. Кто-нибудь может мне помочь?? Почему оператор in не возвращает true ??

list1 = [1,2,3]
list2 = [1,2,3,4,5] 
print(list1 in list2)`

Вместо этого он возвращает false.

list1 = [1,2,3]
list2 = [1,2,3] 
print(list1 in list2)`

возвращает false в обоих случаях.

Ответы [ 2 ]

6 голосов
/ 05 мая 2020

list1 in list2 не проверяет, содержится ли каждый элемент list1 в list2; он проверяет, является ли list1 сам элементом list2:

>>> [1, 2, 3] in [1, 2, 3]
False
>>> [1, 2, 3] in [[1, 2, 3]]
True

Вы можете использовать функцию all для автоматизации поэлементной проверки:

>>> all(x in list2 for x in list1)
True
1 голос
/ 05 мая 2020

Как сказал Чепнер, list1 in list2 проверяет, находится ли list1 в list2. Что вы можете сделать, это проверить, находится ли каждый элемент из list1 в list2, используя для l oop:

for i in list1:
    if i in list2:
        print(i)

Это распечатает все элементы, которые находятся в обоих list1 и в list2.

То, что вы также можете сделать, что намного быстрее, - это использовать sets. Сначала сделайте список1 и список2 в набор:

set_list1 = set(list1)
set_list2 = set(list2)

Вы также можете записать набор, не начиная со списка:

set_list1 = {1,2,3}
set_list2 = {3,4,5}

Обратите внимание, что в наборах вы используете {} не []

Тогда вот несколько вещей, которые вы можете сделать с наборами:

print(set_list1 | set_list2)  # Union - {1,2,3,4,5}
print(set_list1 & set_list2)  # Intersection - {3}
print(set_list1 - set_list2)  # Difference - {1,2}
print(set_list2 - set_list1)  # Difference - {4,5}
print(set_list1 ^ set_list2)  # Symmetric difference - {1,2,4,5}

Надеюсь, это помогло.

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