Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何检查';如果条件为';对于列表中的每个项目_Python_Design Patterns - Fatal编程技术网

Python 如何检查';如果条件为';对于列表中的每个项目

Python 如何检查';如果条件为';对于列表中的每个项目,python,design-patterns,Python,Design Patterns,我试着对照一套非常具体的规则来检查一个特定的列表。 在这个特定的例子中,我有一个退出代码列表,我想检查测试是否失败。如果即使其中一个退出代码不是0,测试也会失败 我目前的执行情况: for exit_code in result_list: if exit_code is not 0: raise TestFailed 问题:有可能把前两行塞进一行吗?这样做是否更可取?您可以使用任何: if any(exit_code != 0 for exit_code in res

我试着对照一套非常具体的规则来检查一个特定的列表。 在这个特定的例子中,我有一个退出代码列表,我想检查测试是否失败。如果即使其中一个退出代码不是0,测试也会失败

我目前的执行情况:

for exit_code in result_list:
    if exit_code is not 0:
        raise TestFailed

问题:有可能把前两行塞进一行吗?这样做是否更可取?

您可以使用
任何

if any(exit_code != 0 for exit_code in result_list):
    raise TestFailed
请注意,上述方法假定您也在检查布尔值
False
(例如
None
,或
False
!)的等效值。如果您确定您的
结果\u列表
只包含数字,您可以将其进一步缩短:

if any(result_list):
    raise TestFailed

您也可以像这样使用
any
all

>>> any(exit_code !=0 for exit_code in result_list)
True
>>> all(exit_code==0 for exit_code in result_list)
False
因为在python中1为True,0为false


any(result\u list)
将尝试查找任何非0的1元素(True)

IMHO使用
any
不会使代码更具可读性。我个人建议不要使用从
int
bool
的隐式转换,因为这会降低代码的可读性。我喜欢清楚明了。
any
的唯一优点可能是性能更好,因为循环位于库函数内部。但这可能是过早的优化和/或不是您的性能瓶颈。标记为正确答案,不仅给出了正确的解决方案,而且给出了两种我不熟悉的类似方法。以及解释每个函数返回的内容。在这里使用
all(result\u list)
是错误的。在传递到
all
之前,必须对元素求反
error\u found=notall(结果列表中的i不是i)
。在传递到
all
之前,列表的否定不能忽略。@Markus在这里使用
all
有点冒险,因为它不会传递所有案例。例如:
[0,0,1,0,0]
-->
并非全部()
将导致
True
,您的代码也将导致
True
,我们不能在此处使用
all
。请删除否决票。我将@ritesht93的答案标记为正确答案,但也对这个答案投了赞成票,因为它包含了一个关于如何实现这一点的非常好的解释。我真的很喜欢第二个更短的实现。太好了!