检查一个列表中的任何元素是否在另一个列表中

h1h*_*1h1 33 python list

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

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")
Run Code Online (Sandbox Code Playgroud)

在这个例子中,我想要if评估,True因为5在两个列表中.这不起作用,我不确定比较两个列表的最简单方法.

Dav*_*ber 67

你可以解决这么多问题.一个很容易理解的就是使用一个循环.

def comp(list1, list2):
    for val in list1:
        if val in list2:
            return True
    return False
Run Code Online (Sandbox Code Playgroud)

更简洁的方法是使用mapreduce:

reduce(lambda v1,v2: v1 or v2, map(lambda v: v in list2, list1))
Run Code Online (Sandbox Code Playgroud)

更好的是,reduce可以替换为any:

any(map(lambda v: v in list2, list1))
Run Code Online (Sandbox Code Playgroud)

你也可以使用集合:

len(set(list1).intersection(list2)) > 0
Run Code Online (Sandbox Code Playgroud)

  • 第一个版本不起作用(当两个列表中只有一个值时,不仅当所有值都在两个列表中时,您都会得到True) (4认同)
  • 第一种方法是错误的.它是从list1到list2的比较.必须从两个角度执行基于循环的比较,包括从list2到list1.例如:对于list2中的val:...如果list1中的val ...等等,如果在list2上找到第一个值,则返回True,这意味着它不会继续比较所有值.内部if语句应该是(如果val不在list2中:返回False),这意味着只要从第一个元素到最后一个元素有正确的值,它就会继续. (2认同)
  • @gextra:正如所有回答的人所解释的那样,如果`list1`中的任何值在`list2`中,则返回'True`,反之亦然.你的评论 - 以及之前的评论 - 暗示你认为问题是确定列表是否包含所有相同的值(或者可能确定`list1`中的值是否是`list2`中值的子集;我可以两个评论都不确定.我可以看到你如何以这种方式解释问题,但不要认为这是意图.你可以要求澄清这个问题,以便我们确切知道. (2认同)
  • 该答案已被多次编辑,看起来与原来的形式有很大不同,并且它不再回答原来的问题。此外,问题的标题已被编辑,使其成为与最初提出的问题不同的问题。正如大多数回答者所解释的那样,@h1h1 最初的问题是确定一个列表是否包含另一个列表的任何相同元素。问题已更改为检查一个列表是否包含第二个列表的所有元素。该答案已部分修改以回答该问题,但其他部分仍然回答原始问题。 (2认同)
  • 与我对这个问题的评论类似:我对这个问题采取了两项行动:我修改了它以反映问题的明显原点:确定一个列表中的任何值是否在另一个列表中。我相信这是最初的意图,因为问题地址的最佳答案和 @h1h1 选择了一个解决该问题的答案。h1h1 已经存在很多年了,所以我无法要求他或她澄清。采取的第二个操作是将此答案恢复到其被部分修改以解决“确定一个列表中的所有元素是否都在第二个列表中”之前的状态。 (2认同)

vid*_*dit 14

有不同的方式.如果您只想检查一个列表是否包含其他列表中的任何元素,您可以执行此操作.

not set(list1).isdisjoint(list2)
Run Code Online (Sandbox Code Playgroud)

我相信使用isdisjointintersectionPython 2.6及更高版本更好.


小智 9

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

以下是cmp()方法的语法 -

cmp(list1, list2)

#!/usr/bin/python

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

print cmp(list1,list2)
Run Code Online (Sandbox Code Playgroud)

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

0
Run Code Online (Sandbox Code Playgroud)

如果结果是平局,则表示返回0

  • 这并不能回答问题。OP 想知道在两个列表中是否找到相同的值。 (2认同)

dan*_*lmo 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")
Run Code Online (Sandbox Code Playgroud)


col*_*s44 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"
Run Code Online (Sandbox Code Playgroud)

"&"运算符给出了两组之间的交叉点.如果存在交叉点,则将返回具有交叉点的集合.如果没有相交点,则返回空集.

当您使用Python中的"if"运算符计算空set/list/dict/tuple时,将返回布尔值False.