Вопрос по python – Однострочник, чтобы проверить, существует ли хотя бы один элемент в списке в другом списке? [Дубликат]

42

This question already has an answer here:

How to check if one of the following items is in a list? 14 answers

Допустим, у меня есть список a=[1,2,3] И я хочу знать, существует ли хотя бы одно из чисел в нем в другом списке, как этот: b=[4,5,6,7,8,1] Другими словами, я хочу знать, существует ли 1,2 или 3 в спискеb. I now I could do something like

def func(a, b):
    for i in a:
       if i in b:
          return True
    return False

Но есть ли способ поместить это в одну строку, чтобы привести в порядок вещи?

Ваш Ответ

6   ответов
4

def func(a, b):
    return any([i in b for i in a])
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
41

простой однострочник будет:

any(i in b for i in a)
Error: User Rate Limit Exceeded
5

вы можете выполнять над ними операции над множествами. Если пересечение больше 0, у вас есть хотя бы один соответствующий элемент:

len(set(a) & set(b)) > 0
47

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 и выше, как отмечено различными людьми ниже. Рад узнать об этом. :)

13

Этоset проблема, а неlist проблема. При правильном типе данных ответ часто сразу очевиден :-)

def func(a, b):
    return not set(a).isdisjoint(b)
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceededat least onceError: User Rate Limit Exceededcollections.CounterError: User Rate Limit Exceeded
58

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

;)

Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded2.6 and belowError: User Rate Limit Exceeded3.4 and below
Error: User Rate Limit Exceeded

Похожие вопросы