2013-05-30 21 views
6

我有一個python項目列表,以及一種檢查項目是否有效的方法。如果有任何一個項目無效,我需要拒絕整個列表。我可以這樣做:在Python中快速拒絕列表的方法

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

是否有更多的Pythonic方式來做到這一點?你可以過濾它,但是這將評估列表中的所有項目,當評估只是第一個可能是足夠的(如果它是壞的)...

非常感謝您的幫助。

回答

14

做到這一點,典型的方法是使用內置的any功能與發電機表達

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

的語法是乾淨的,優雅的,你會得到你對你的原有功能相同的短路行爲。

+0

不錯!不知道這樣的事情! – gt6989b

+0

它應該是'不是任何'。 –

+0

@AshwiniChaudhary - 我更喜歡改變程序的邏輯。如果有的話無效,則拒絕該列表(而不是OP當前有的 - 如果沒有任何無效,則保留該列表)。但這最終是OP決定:) – mgilson