与Python的all()混淆。有更容易理解的解决方案吗?

与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 您错误地阅

我已经发现了很多语义错误,因为在python的all中的错误位置交换变量会造成混乱

我将共享的布尔表达式旨在确保X中的所有元素都存在于新的_列表中

例如,如果new_list=1,2,3和X=1..to…9。当答案真的为假时,我使用的表达式返回真

问题
既然布尔表达式在过去引起了语义错误,有没有更容易阅读的方法?也许对那些编码能力有限的人有一个解释?

一种更简单、更有效的方法可能是使用集合方法:

>>> 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)