由于错误地将变量交换到python的all()中,我发现了许多语义错误。
我将共享的布尔表达式旨在确保X中的所有元素都存在于new_list中。
例如,如果new_list = 1,2,3和X = 1..to...9。当答案真的是FALSE时,我使用的表达式返回了TRUE。
>>> X = [1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> new_list = [1,2,3]
>>> all(elem in X for elem in new_list)
True
# Notice that a False positive returned. Not all elements in X exist in new_list问题
由于布尔表达式在过去曾导致语义错误,是否有更容易阅读的方法?也许是对那些编码能力有限的人的解释?
发布于 2020-04-20 05:05:59
一个更简单(更有效)的方法可能是使用set方法:
>>> set(X).issubset(new_list)
False发布于 2020-04-20 05:11:42
你看错了语法:
X= 1, 2,3,4,5,6,7,8,9 new_list = 1,2,3 all
这将检查new_list中的所有new_list是否都在X中。你可能想要的是
print( all( elem in new_list for elem in X) )
^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^
condition to check what to check
to get a True/False意思:检查X中的所有X是否都在new_list中。
全部()的文档用一个普通循环解释了它:
all( iterable ) 如果可迭代的所有元素都是True (或者如果迭代是空的),则返回true。相当于: def all(迭代):for元素in iterable:如果不是元素:返回False返回True
发布于 2020-04-20 05:12:17
如果要检查X中的元素是否都在new_list中,那么必须对X中的每个元素进行迭代,然后检查这些元素是否都在new_list中。你的做法正好相反:
X = [1, 2, 3, 4, 5, 6, 7, 8, 9]
new_list = [1,2,3]
all((number_in_x in new_list) for number_in_x in X)尽管如此,使用sets作为@wim提供的是解决问题的更好方法。
https://stackoverflow.com/questions/61315426
复制相似问题