2012-08-09 11 views
5

Supponiamo di avere una sequenza iterabile di oggetti thing denominata things. Ogni thing ha un metodo is_whatever() che restituisce True se soddisfa i criteri "qualunque". Voglio scoprire in modo efficiente se qualsiasi elemento in things è qualsiasi cosa.È un modo efficace e pignolo per vedere se un elemento in un iterabile è vero per un determinato attributo?

Questo è quello che sto facendo ora:

any_item_is_whatever = True in (item.is_whatever() for item in items) 

è che un modo efficace per farlo, vale a dire Python smetterà di generare gli elementi di iterable non appena trova il primo vero risultato? Stilisticamente, è pitone?

risposta

12

si dovrebbe utilizzare la funzione built-in any():

any_item_is_whatever = any(item.is_whatever() for item in items) 
+0

Grazie. Sono sollevato. 'True in' è brutto. – Ghopper21

+0

Ho pensato che fosse piuttosto intelligente ... –

+0

@NoctisSkytower: Corto anche i cortocircuiti quando viene utilizzato con un'espressione di generatore, quindi in realtà è abbastanza buono. Usare il modo idiomatico è di causa sia più leggibile che più veloce. –

Problemi correlati