Однострочник, чтобы проверить, существует ли хотя бы один элемент в списке в другом списке?
Допустим, у меня есть список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
Но есть ли способ поместить это в одну строку, чтобы привести в порядок вещи?
6 ответов
Есть много способов сделать это. Самый прямой перевод:
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 и выше, как отмечено различными людьми ниже. Рад узнать об этом.:)
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
;)
Это заданная проблема, а не проблема списка. При правильном типе данных ответ часто сразу очевиден:-)
def func(a, b):
return not set(a).isdisjoint(b)
Преобразовав ваши списки в наборы, вы можете выполнять над ними операции над множествами. Если пересечение больше 0, у вас есть хотя бы один соответствующий элемент:
len(set(a) & set(b)) > 0
Это должно работать.
def func(a, b):
return any([i in b for i in a])