Python 如何检查';如果条件为';对于列表中的每个项目
我试着对照一套非常具体的规则来检查一个特定的列表。 在这个特定的例子中,我有一个退出代码列表,我想检查测试是否失败。如果即使其中一个退出代码不是0,测试也会失败 我目前的执行情况: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
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的答案标记为正确答案,但也对这个答案投了赞成票,因为它包含了一个关于如何实现这一点的非常好的解释。我真的很喜欢第二个更短的实现。太好了!