2011-09-01 64 views
0

我想要替换和优化从输入列表生成列表值的广泛使用的while循环。如何用iter,itertools,生成器函数或其他东西来实现?以下示例代码仅用于说明:Python将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:列表索引超出range'的。可能是因为你在内部和外部重复使用相同的“索引”。 – MattH

+0

而内部'while'结束条件永远不会被满足。 – MattH

+0

生成器的基本思想:将其放入函数库(块)中,并将'output_list.append(value)'改为'yield value'。 –

回答

0

您可以使用生成器来完成此操作。它会在你每次调用“next”时产生下一个值。

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()