【发布时间】:2020-05-28 23:51:21
【问题描述】:
由于某种原因,我在使用某个 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。我想知道我做错了什么?
【问题讨论】:
-
第一个子句测试每个元素是 4 还是 5,这显然不是任何示例。
-
您的标志条件听起来不对。 (includes 4 && 5) && !(includes 3 || 4) 简化为 4 && 5 && !3 && !4 总是返回 false,因为它不能同时包含 4 和不包含 4
-
您希望排除 3 和 4 还是仅排除其中之一? List3 有 4,5 没有 3,和 List2 一样。那么,如果您希望 List3 被标记,为什么不标记 List2?
-
该死,我试着做一个简单的例子,但在列表中犯了一个愚蠢的错误。这个想法仅仅是第一个列表具有第二个子句的全部或部分,但所有列表都具有第一个子句。一个更好的例子可能是 4 AND 5,但不是 2 OR 3。所以所有列表都有 4 和 5,但只有 list3 没有 2 或 3。
-
@ThomasNicholson 在这种情况下,这应该可以工作:
{4, 5}.issubset(lst) and not {2, 3}.intersection(lst)。
标签: python list if-statement any