Python使用列表搜索列表,所有和任何
由于某种原因,我在使用某个if语句时遇到了问题。假设我有三个列表: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
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
仔细看看:
:inc中的所有元素(需要包含的元素)都是给定列表l的一部分all(i in l代表i in inc)
:对于给定列表l中的每个元素,它们中的任何一个都不应在exc列表中(需要排除的元素)没有(e在exc中表示e在l中)
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)
。