Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.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使用列表搜索列表,所有和任何_Python_List_If Statement_Any - Fatal编程技术网

Python使用列表搜索列表,所有和任何

Python使用列表搜索列表,所有和任何,python,list,if-statement,any,Python,List,If Statement,Any,由于某种原因,我在使用某个if语句时遇到了问题。假设我有三个列表: list1 = [1,2,3,4,5] list2 = [1,2,4,5] list3 = [4,5,6,7,8] 我评估每一个。如果列表同时有4和5,但没有2或3,我想标记它。我认为这会奏效: if all(q in [4,5] for q in the_list_name) and not any(q in [2,3] for q in the_list_name) 我希望它只标记list3。但是,它在所有列表上都返回f

由于某种原因,我在使用某个if语句时遇到了问题。假设我有三个列表:

list1 = [1,2,3,4,5]
list2 = [1,2,4,5]
list3 = [4,5,6,7,8]
我评估每一个。如果列表同时有4和5,但没有2或3,我想标记它。我认为这会奏效:

if all(q in [4,5] for q in the_list_name) and not any(q in [2,3] for q in the_list_name)
我希望它只标记
list3
。但是,它在所有列表上都返回false。我想知道我做错了什么?

如果我们查看
all(q在[4,5]中表示q在\u列表\u名称中)
,那么只有一半的If,我们可以看到它在所有列表中返回
False
。该语句实际上测试列表中的所有元素是4还是5。与另一个相同,它测试所有元素是3还是4,因此所有元素都是
False
是有意义的

要正确测试列表是否包含4和5,但没有3或4,可以将代码更改为:

inc = [4, 5]
exc = [2, 3]
testList = lambda l, inc, exc: all(i in l for i in inc) and not any(e in exc for e in l)
结果:

>>> testList(list1, [4, 5], [2, 3])
False
>>> testList(list2, [4, 5], [2, 3])
False
>>> testList(list3, [4, 5], [2, 3])
True
仔细看看:

  • all(i in l代表i in inc)
    :inc中的所有元素(需要包含的元素)都是给定列表l的一部分
  • 没有(e在exc中表示e在l中)
    :对于给定列表l中的每个元素,它们中的任何一个都不应在exc列表中(需要排除的元素)
编辑:

如果您想使用推荐中的@ekhumoro答案(这更优雅),但也有需要包含/排除的元素的参数,您可以使用:

testList = lambda l, i, e: {*i}.issubset(l) and not {*e}.intersection(l)

一个简单的方法可以是:-


if((4个在列表名称中,5个在列表名称中)和(2个不在列表名称中,或3个不在列表名称中))

第一个子句测试每个元素是4还是5,这在任何示例中都显然不正确。您的标记条件听起来是错误的。(包括4和5)和&!(包括3 | | 4),简化为4&&5&!3 && !4总是返回false,因为它不能同时包含4和不包含4您希望3和4都被排除还是只包含其中一个?清单3既有4,5,也没有3,这与清单2中的相同。那么,如果您希望标记List3,为什么不标记List2呢?该死,我试着做一个简单的示例,结果在列表中犯了一个愚蠢的错误。这个想法仅仅是第一个列表包含第二个子句的全部或部分,但是所有列表都包含第一个子句。更好的例子可以是4和5,但不是2或3。所以所有列表都有4和5,但只有列表3既没有2也没有3。@ThomasNicholson在这种情况下,这应该起作用:
{4,5}.issubset(lst)而不是{2,3}.intersection(lst)