2011-12-23 2 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 и х [ 'ID'] & 1' - не только вторая часть этого условия достаточной? – eumiro

+0

спасибо за комментарий, я исправлю это условие –

+1

@eurmiro: Да, этого достаточно в текущем контексте (инструкция 'if' etc). В противном случае существует тонкая разница, когда переменная == 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 - это compacter и значение 'i' является правильным в любой момент. Во всяком случае, я думаю, что 'print' здесь самая медленная часть. – eumiro

2

Нет, я не думаю, что вы можете использовать enumerate, чтобы упростить этот код (не без прореживания vars первых, так что enumerate будет применяться только к элементам которые соответствуют условию).

Если честно, я думаю, что код довольно прост, как есть.