2015-08-19 2 views
0

У меня есть итератор result в одной функции, и мне нужно вернуть итератор после внесения некоторых изменений в объекты в result из этой функции. Я не хочу перебирать result, так как это приводит к ухудшению производительности. Я хочу выполнить эту операцию «на лету» для каждого элемента в result.Возвратите итератор после модификации

Это код, который выполняет итерацию по результату для выполнения этой операции.

sols = [] 
# Get rid of this loop 
for sol in result: 
    sols.append(dict((symbols[abs(lit) - 1], lit > 0) for lit in sol)) 
# Return iterator object 
return (sol for sol in sols) 
+1

Вы пробовали ключевое слово 'yield' http://stackoverflow.com/questions/231767/what-does-the-yield-keyword-do-in-python –

+0

Я согласен с Микко, доходность будет намного проще –

ответ

2

Вы почти у цели. Только не хранить значения в sols списке:

def f(result): 
    return (dict((symbols[abs(lit) - 1], lit > 0) for lit in sol) for sol in result) 

Это дает (не каламбур) генератор, который постепенно проходит данный result параметр.

+0

Большое спасибо! Это работало. –

Смежные вопросы