Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何检查一个列表中的值是否在另一个列表中,Python if I'中的if语句使用一行程序;我不用电视机?_Python_Python 2.7_List - Fatal编程技术网

如何检查一个列表中的值是否在另一个列表中,Python if I'中的if语句使用一行程序;我不用电视机?

如何检查一个列表中的值是否在另一个列表中,Python if I'中的if语句使用一行程序;我不用电视机?,python,python-2.7,list,Python,Python 2.7,List,我试图构造一个单行程序,检查一个列表中的任何值是否存在于另一个列表中,如果存在或不存在,则返回True或False 我最接近的是以下几点: [i in list1 for i in list2] 问题是,它将遍历列表1,并根据列表2中是否存在列表1中的项目,输出一个True和False列表 我能做的就是遍历这个新创建的True和False列表,但我不能在同一行中这样做。在这种情况下,我不能使用集合或导入任何函数,因为我在第三方软件中使用集合作为条件,您不能在条件中插入集合或使用函数。您可以使用

我试图构造一个单行程序,检查一个列表中的任何值是否存在于另一个列表中,如果存在或不存在,则返回True或False

我最接近的是以下几点:

[i in list1 for i in list2]
问题是,它将遍历列表1,并根据列表2中是否存在列表1中的项目,输出一个True和False列表

我能做的就是遍历这个新创建的True和False列表,但我不能在同一行中这样做。在这种情况下,我不能使用集合或导入任何函数,因为我在第三方软件中使用集合作为条件,您不能在条件中插入集合或使用函数。

您可以使用带有生成器表达式的
任何(…)
内置函数:

any(e in list2 for e in list1)
因此,这将检查两个列表中是否至少有一个元素

但是请注意,这将导致最坏情况下的O(n2)算法。例如,如果元素是可散列的,并且您可以使用
集合
,我们可以将其设置为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)个最坏情况:

Supose我们有以下列表:

list1 = ['bar', 'foo', 'qwerty', 9, 1]
list2 = [1, 2, 3, 'foo']
如果我们想看到重复的值:

[i for i in list1 if i in list2]
输入:

['foo', 1]
[True, False, False, True]
如果我们想要真的假:

(map(lambda each: each in list1, list2))
输入:

['foo', 1]
[True, False, False, True]

输入正在检查列表2,第一个值“1”存在于列表1中,最后一个值“foo”也存在。

到目前为止您尝试了什么?请看,我已经尝试了[列表1中的I代表列表2中的I]和[列表1中的I代表列表2中的I,如果我代表列表2中的I]但都没有返回我需要的内容。我还研究了在一行中使用集合或不使用集合的不同方法,但是我不能在这里使用它们。这实际上是完美的,只是测试了一下。我知道,将整个代码放在一行中会导致性能问题,但不幸的是,这是我唯一可以使用的方法。如果元素不可散列,这是您可以获得的最佳性能。O(n^2)永远是最坏的情况,因为无论您在列表中迭代的顺序是什么,都有可能唯一的共同元素是每个列表的最后一个<代码>任何都足够聪明,只要找到匹配项,就可以停止迭代。如果元素是可散列的,那么只使用set。。。很好的回答…我不能使用集合,不幸的是,在我们编写脚本的系统的条件标记中,它不是一个可接受的表达式,但是我可以使用它。不完全理解您的意思,但是如果问题是将集合视为布尔数,您也可以使用
if len(set(list1).intersection(list2))>0:
。不过这有点难看,这种情况是在一个基于XML的系统中实现的。在该系统中,有XML条件属性(cond),您可以在其中插入实际的python条件进行计算。这些条件是用python编写的,但是在这些条件中可以包含的内容有一个限制,本例中的限制是不能使用两行,也不能在其中使用集合。我希望这是有意义的。