Подтвердить что ты не робот

Проверка того, находятся ли какие-либо элементы в одном списке в другом

Я пытаюсь сравнить два списка и просто распечатать сообщение, если какое-либо значение из первого списка находится во втором списке.

def listCompare():
  list1 = [1, 2, 3, 4, 5]
  list2 = [5, 6, 7, 8, 9]
  if list1 in list2:
    print("Number was found")
  else:
    print("Number not in list")

В этом примере я хочу, чтобы if оценивался до True, потому что 5 находится в обоих списках. Это не работает, и я не уверен в простейшем способе сравнить два списка.

4b9b3361

Ответ 1

Вы могли бы решить это многими способами. То, что довольно просто понять, - это просто использовать цикл.

def comp(list1, list2):
    for val in list1:
        if val in list2:
            return True
    return False

Более компактным способом вы можете использовать map и reduce:

reduce(lambda v1,v2: v1 or v2, map(lambda v: v in list2, list1))

Еще лучше, reduce можно заменить на any:

any(map(lambda v: v in list2, list1))

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

len(set(list1).intersection(list2)) > 0

Ответ 2

Существуют разные способы. Если вы просто хотите проверить, содержит ли один список какой-либо элемент из другого списка, вы можете сделать это.

not set(list1).isdisjoint(list2)

Я считаю, что использование isdisjoint лучше, чем intersection для Python 2.6 и выше.

Ответ 3

Существует встроенная функция для сравнения списков:

Ниже приведен синтаксис метода cmp() -

cmp(list1, list2)

#!/usr/bin/python

list1, list2 = [123, 'xyz'], [123, 'xyz']

print cmp(list1,list2)

Когда мы запускаем программу выше, она производит следующий результат:

0

Если результатом является привязка, что означает, что возвращается 0

Ответ 4

Ваш оригинальный подход может работать со списком:

def listCompare():
  list1 = [1, 2, 3, 4, 5]
  list2 = [5, 6, 7, 8, 9]
  if [item for item in list1 if item in list2]:
    print("Number was found")
  else:
    print("Number not in list")

Ответ 5

Вы можете изменить списки на наборы, а затем сравнить оба набора с помощью функции и. например:

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

if set(list1) & set(list2):
    print "Number was found"
else:
    print "Number not in list"

"&" оператор дает точку пересечения между двумя множествами. Если есть пересечение, будет возвращено множество с пересекающимися точками. Если нет пересекающихся точек, возвращается пустое множество.

Когда вы оцениваете пустой набор /list/dict/tuple с оператором "if" в Python, возвращается логическое False.

Ответ 6

В одном из моих проектов я написал следующий код. Он в основном сравнивает каждый отдельный элемент списка. Не стесняйтесь использовать его, если он работает для вашего требования.

def reachedGoal(a,b):
    if(len(a)!=len(b)):
        raise ValueError("Wrong lists provided")

    for val1 in range(0,len(a)):
        temp1=a[val1]
        temp2=b[val1]
        for val2 in range(0,len(b)):
            if(temp1[val2]!=temp2[val2]):
                return False
    return True