Python中快速拒绝列表的方法

6

我有一个Python中的项目列表,以及检查该项目是否有效的方法。如果其中任何一个项目无效,我需要拒绝整个列表。我可以这样做:

def valid(myList):
    for x in myList:
        if isInvalid(x):
           return False
    return True

有没有更加Pythonic的方法来做这件事?你可以使用过滤器,但那会评估列表中的所有项,而只评估第一个项可能已经足够了(如果它很差)...非常感谢您的帮助。
1个回答

14

通常的做法是使用内置any函数和一个生成器表达式。

if any(isInvalid(x) for x in myList):
   #reject

语法简洁优美,您将获得与原始函数相同的短路行为。


不错!没想到还有这种东西! - gt6989b
@AshwiniChaudhary -- 我更倾向于改变程序的逻辑。如果有任何无效的内容,拒绝该列表(而不是目前 OP 所做的--如果没有任何无效内容,则保留该列表)。但这最终取决于 OP 决定 :) - mgilson
如果有任何(…):直接用return False替换循环在OP的代码中。将其压缩为return not any(…)是进一步的步骤,但我认为这是对问题更明显的答案。 - abarnert

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接