首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >与Python的all()混淆。有什么更容易理解的解决方案吗?

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

Stack Overflow用户
提问于 2020-04-20 05:03:33
回答 3查看 43关注 0票数 0

由于错误地将变量交换到python的all()中,我发现了许多语义错误。

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

例如,如果new_list = 1,2,3X = 1..to...9。当答案真的是FALSE时,我使用的表达式返回了TRUE

代码语言:javascript
复制
>>> 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

问题

由于布尔表达式在过去曾导致语义错误,是否有更容易阅读的方法?也许是对那些编码能力有限的人的解释?

EN

回答 3

Stack Overflow用户

发布于 2020-04-20 05:05:59

一个更简单(更有效)的方法可能是使用set方法:

代码语言:javascript
复制
>>> set(X).issubset(new_list)
False
票数 3
EN

Stack Overflow用户

发布于 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中。你可能想要的是

代码语言:javascript
复制
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

票数 2
EN

Stack Overflow用户

发布于 2020-04-20 05:12:17

如果要检查X中的元素是否都在new_list中,那么必须对X中的每个元素进行迭代,然后检查这些元素是否都在new_list中。你的做法正好相反:

代码语言:javascript
复制
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提供的是解决问题的更好方法。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61315426

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档