35

我正在尝试比较两个列表,如果第一个列表中的任何值在第二个列表中,则只需打印一条消息。

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 在两个列表中。这不起作用,我不确定比较这两个列表的最简单方法。

4

6 回答 6

74

你可以通过多种方式解决这个问题。一个很容易理解的方法是只使用一个循环。

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

一种更紧凑的方法是使用mapand 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
于 2013-04-22T01:26:01.047 回答
15

有不同的方法。如果您只想检查一个列表是否包含另一个列表中的任何元素,您可以这样做..

not set(list1).isdisjoint(list2)

我相信 usingisdisjointintersectionPython 2.6 及更高版本更好。

于 2013-04-22T01:29:39.147 回答
9

有一个内置函数来比较列表:

以下是 cmp() 方法的语法 -</p>

cmp(list1, list2)

#!/usr/bin/python

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

print cmp(list1,list2)

当我们运行上面的程序时,它会产生以下结果 -</p>

0

如果结果是平局,则意味着返回 0

于 2015-05-12T07:25:54.900 回答
8

您的原始方法可以与列表理解一起使用:

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")
于 2013-04-22T02:05:10.510 回答
6

您可以将列表更改为集合,然后使用 & 函数比较两个集合。例如:

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"

“&”运算符给出了两个集合之间的交点。如果有交叉点,则返回一个包含交叉点的集合。如果没有相交点,则将返回一个空集。

当您在 Python 中使用“if”运算符评估空集/列表/字典/元组时,将返回布尔值 False。

于 2015-07-16T14:18:20.997 回答
1

我在我的一个项目中编写了以下代码。它基本上比较列表中的每个单独元素。如果它适合您的要求,请随意使用它。

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
于 2017-02-01T13:32:05.940 回答