繁体   English   中英

如果我不使用集合,如何检查一个列表中的值是否在带有if语句的单行代码的另一个列表中?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM