与Python的all()混淆。有更容易理解的解决方案吗?
我已经发现了很多语义错误,因为在python的all中的错误位置交换变量会造成混乱 我将共享的布尔表达式旨在确保X中的所有元素都存在于新的_列表中 例如,如果new_list=1,2,3和X=1..to…9。当答案真的为假时,我使用的表达式返回真 问题与Python的all()混淆。有更容易理解的解决方案吗?,python,boolean-expression,Python,Boolean Expression,我已经发现了很多语义错误,因为在python的all中的错误位置交换变量会造成混乱 我将共享的布尔表达式旨在确保X中的所有元素都存在于新的_列表中 例如,如果new_list=1,2,3和X=1..to…9。当答案真的为假时,我使用的表达式返回真 问题 既然布尔表达式在过去引起了语义错误,有没有更容易阅读的方法?也许对那些编码能力有限的人有一个解释?一种更简单、更有效的方法可能是使用集合方法: >>> set(X).issubset(new_list) False 您错误地阅
既然布尔表达式在过去引起了语义错误,有没有更容易阅读的方法?也许对那些编码能力有限的人有一个解释?一种更简单、更有效的方法可能是使用集合方法:
>>> set(X).issubset(new_list)
False
您错误地阅读了语法: 这将检查新列表中的所有元素是否都出现在X中。您可能想要的是
print( all( elem in new_list for elem in X) )
^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^
condition to check what to check
to get a True/False
意思:检查X中的所有元素是否出现在新列表中
的文档用一个正常循环来解释它:
完全不可容忍
如果iterable的所有元素都为True或iterable为空,则返回True。相当于:
def all(iterable):
for element in iterable:
if not element:
return False
return True
如果您想检查X中的元素是否都在new_列表中,那么您必须迭代X中的每个元素,然后检查这些元素是否都在new_列表中。你的做法正好相反:
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)
也就是说,使用@wim提供的集合是解决问题的更好方法。这很简单,也更容易理解。这个表达式不像日语,它不是一个布尔表达式,它是一个生成器表达式,它与all无关,只接受任何iterable。
def all(iterable):
for element in iterable:
if not element:
return False
return True
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)