2017-10-12 30 views
1

在Ruby中,您可以使用#find方法在找到符合特定條件的數組中的第一個實例後進行短路。有沒有在python中的枚舉器查找方法?

arr = [5,6,7] 
arr.find { |n| n % 2 == 0 } #=> 6 

Python中是否存在等價物?或者你需要使用for循環嗎?我試圖避免這種情況:

arr = [5,6,7] 
for n in arr: 
    return n if n % 2 == 0 

也許有一個解決方案與發電機?或者,循環只是唯一的pythonic解決方案。

回答

6

Perhaps there's a solution with generators?

是的,你可以使用一個發電機,並呼籲next就可以了。返回的第一個項目配套的標準和提出了一個StopIteration錯誤,如果沒有:

next(n for n in arr if n % 2 == 0) 

的Python還允許你傳遞的情況下,沒有一個默認的返回值的項目匹配篩選條件從而抑制了錯誤:

next((n for n in arr if n % 2 == 0), None) 
+1

如果沒有發現任何內容,說出_which_錯誤可能很有用,因此OP知道如何捕獲它:-) – mgilson

+0

@mgilson是的,我已更新。 –

+1

是的,'None'確實是最好的默認值,因爲從'#find'方法返回的'nil'是ruby。 –

相關問題