Однострочный, чтобы проверить, существует ли хотя бы один элемент в списке в другом списке?
Допустим, у меня есть список
a=[1,2,3]
И я хочу знать, существует ли хотя бы один из номеров в другом списке, например:
b=[4,5,6,7,8,1]
Другими словами, я хочу знать, существуют ли 1,2 или 3 (-ы) в списке b
.
Теперь я мог бы сделать что-то вроде
def func(a, b):
for i in a:
if i in b:
return True
return False
Но может ли быть способ поставить это в одну строку, чтобы сделать вещи в порядке?
Ответы
Ответ 1
Есть много способов сделать это. Самый прямой перевод:
any_in = lambda a, b: any(i in b for i in a)
Вы также можете использовать различные вещи, включая наборы, такие как:
any_in = lambda a, b: bool(set(a).intersection(b))
(который зависит от того, что элементы a
являются хешируемыми, но если это правда, скорее всего, будет быстрее сделать набор из a
и b
для любого из этих подходов).
Изменить: isdisjoint
лучше, чем intersection
для Python 2.6 и выше, как отмечают различные люди ниже. Рад узнать об этом.:)
Ответ 2
Python 2.6 и выше:
def func(a, b):
return not set(a).isdisjoint(b)
Для 2.4 или 2.5:
def func(a, b):
return len(set(a).intersection(b)) != 0
Для 2.3 и ниже:
sudo apt-get update
sudo apt-get upgrade
;)
Ответ 3
простая однострочная линия:
any(i in b for i in a)
Ответ 4
Это заданная проблема, а не проблема с списком. При правильном типе данных ответ часто сразу становится очевидным: -)
def func(a, b):
return not set(a).isdisjoint(b)
Ответ 5
Преобразуя свои списки в группы, вы можете выполнять на них заданные операции. Если пересечение больше 0, у вас есть хотя бы один элемент, соответствующий:
len(set(a) & set(b)) > 0
Ответ 6
Это должно сработать.
def func(a, b):
return any([i in b for i in a])