2011-09-01 9 views
0

入力リストからリスト値を生成する、広範囲に使用されるwhileループを置き換えて最適化したい。 iter、itertools、ジェネレータ関数などでこれをどのように達成できますか?次のコード例は、説明のためだけのものです。whileループをジェネレータ関数に変換する

thislist = [2, 8, 17, 5, 41, 77, 3, 11] 

newlist = [] 

index = 0 
listlength = len(thislist) 

while index < listlength: 
    value = 0 
    while thislist[index] >= 0: 
     value += thislist[index] 
     value += 2 * value 
     index += 1 
    value += thislist[index] 
    index += 1 
    newlist.append(value) 

print newlist 
+2

はあなたのコード例では、 'IndexErrorを返しました。おそらく、内側と外側に同じ "インデックス"を再使用しているからでしょう。 – MattH

+0

そして内側の 'while'終了条件は決して満たされません。 – MattH

+0

ジェネレータの基本的な考え方:それを関数群(ブロック)に入れ、 'output_list.append(value)'を 'yield value'に変更します。 –

答えて

0

ジェネレータで行うことができます。次の値は、「次へ」を呼び出すたびに発生します。 range`のうちリストインデックス:

def my_gen(data): 
    for index in range(0, len(data)-1): 
     value = data[index] 
     value += 2 * value 
     #etc 
     yield value 

my_list = [2, 8, 17, 5, 41, 77, 3, 11] 
x = my_gen(my_list) 
print x.next() 
print x.next() 

関連する問題