[英]How to check if a value in one list is in another list with a one-liner for an if statement in Python if I'm not using sets?
我正在尝试构造一个班轮,该班轮将检查一个列表中的任何值是否存在于另一列表中,如果存在或不存在,则返回True或False。
我最接近的是以下内容:
[i in list1 for i in list2]
这样做的问题是,它将遍历list1并输出一个true和False的列表,具体取决于list1中的项目是否存在于list2中。
然后,我可以做的就是遍历这个新创建的True和False列表,但是我不能在同一行中这样做。 在这种情况下,我无法使用集合或导入任何函数,因为我在第三方软件中将其用作条件时,无法在条件中插入集合或使用函数。
您可以使用带有生成器表达式的any(..)
内置函数:
any(e in list2 for e in list1)
因此,这将检查两个列表中是否至少存在一个元素。
但是请注意,这将导致最坏情况的O(n 2 )算法。 例如,如果元素是可哈希的,并且可以使用set
,则可以将其set
O(n)平均情况算法。
你也可以
set(list1).intersection(list2)
获得在这两个元素中都出现的元素集; 如果没有交集,则集合的长度为0,否则为正。 您可以将此集视为布尔值,因为Python将空集评估为False,将非空集评估为True。
if set(list1).intersection(list2):
print ('Lists have elements in common')
else:
print ('No elements in common')
运行时是O(n)平均情况,O(n ^ 2)最坏情况: https : //wiki.python.org/moin/TimeComplexity
假设我们有以下列表:
list1 = ['bar', 'foo', 'qwerty', 9, 1]
list2 = [1, 2, 3, 'foo']
如果要查看重复的值:
[i for i in list1 if i in list2]
输入:
['foo', 1]
如果我们想要True false:
(map(lambda each: each in list1, list2))
输入:
[True, False, False, True]
输入正在检查list2,第一个值'1'存在于list1中,最后一个值'foo'也存在。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.