Могу ли я распаковать переменные, чтобы проверить их членство в другом списке? - PullRequest
1 голос
/ 14 апреля 2019

Я хотел бы знать, если у меня есть список целых чисел, могу ли я распаковать их, чтобы проверить, присутствуют ли они в другом списке, или я должен сделать это вручную? Я знаю, что есть встроенные функции, такие как any () и all (), но мне интересно, можем ли мы распаковать переменные во время теста на членство.

list1 = [1,2,3,4,5,6,7,8,9,0]
list2 = [5,3,2,]
if (*list1) in list2:
    print("it works")

Ответы [ 3 ]

2 голосов
/ 14 апреля 2019

Функция, которой нужны аргументы из типа данных коллекции, принимает распаковку коллекции.Вы можете проверить членство в этой функции, сравнивая распакованные аргументы с элементами в другой коллекции.Ниже приведена пользовательская функция, которая принимает распаковку list1 и сравнивает элементы в этом списке с другим списком list2.

list1 = [1,2,3,4,5,6,7,8,9,0]
list2 = [5,3,2]

def intersection(*args, list2):
    for i in args:
        if i in list2:
            print(i)

intersection(*list1, list2=list2)
#Output:
2
3
5

Вы также можете использовать встроенные операции set, например intersection, для достижения аналогичных результатов:

set(list1).intersection(list2)
#Ouptut:
{2, 3, 5}
1 голос
/ 14 апреля 2019

Даже если у вас есть дубликаты в списке, вы можете использовать set:

if set(list2).issubset(list1):
    print("it works")

Поскольку он будет просто проверять, существуют ли все элементы из list2 в list1, поэтому дубликаты всегда будут существовать, если существует их первый экземпляр.

Что касается вашего обновленного вопроса, нет, вы не можете использовать этот синтаксис в Python. Упаковка / распаковка в аргументах функции

0 голосов
/ 14 апреля 2019

Вы можете использовать список понимания

If len([x1 if x1 in l2 for x1 in l1])!=0:
  Print('not a great solution with big lists')
...