2011-12-23 64 views
0

我有下面的循環^如何設置枚舉的增加量,取決於條件?

i = 0 
for var in vars: 
    if var[ "ID" ] != 0 and var[ "ID" ] & 1: 
     print i, var[ "ID" ] 
     i += 1  

我可以使用enumerate這個循環,而不是反i?如何設置枚舉的增加,依賴於這個條件:if var[ "ID" ] != 0 and var[ "ID" ] & 1:

+3

'×〔 'ID'] = 0和x [ 'ID']&1' - 不只是這種條件足夠的第二部分? – eumiro

+0

非常感謝你的評論,我會糾正這種情況 –

+1

@eurmiro:是的,它在當前的情況下是足夠的(if語句)。否則當變量== 0時會有細微的差別;在這種情況下,整體評估爲False,但第二部分評估爲0. –

回答

3

你可以使用filter

>>> vs = [{'ID': 1}, {'ID': 4}] 
>>> for i, v in enumerate(filter(lambda x: x['ID'] & 1, vs)): 
...  print i, v 
... 
0 {'ID': 1} 
+0

您的代碼運行速度是否比我的更快? –

+1

@ G-71很難說。如果性能在這裏很重要,你應該測試一下。 –

+1

@ G-71 - 它比較緊湊,「i」的值在任何時候都是正確的。無論如何,我認爲'印刷'在這裏是最慢的部分。 – eumiro

2

不,我不認爲你可以使用enumerate簡化此代碼(不是沒有細化vars首先,讓enumerate將僅適用於要素符合條件)。

說實話,我認爲代碼是非常簡單的,因爲它是。