如何在python中以更有效的方式重写这个循环

leo*_*on 1 python list-comprehension list

我有一个以下类型的循环:

a = range(10)
b = [something]
for i in range(len(a)-1):
    b.append(someFunction(b[-1], a[i], a[i+1]))
Run Code Online (Sandbox Code Playgroud)

然而for循环正在扼杀很多性能.我试着写一个Windows生成器给我2个元素的所有时间,但它仍然需要显式的for循环.有没有办法以pythonic方式缩短和提高效率?

谢谢

编辑:我忘了b中的元素..对不起伙计们.然而,我之前的问题的解决方案对我也有其他问题非常有帮助.谢谢.

S.L*_*ott 8

考虑一下

def make_b( a, seed ):
    yield seed
    for a,b in zip( a[:-1], a[1:] ):
        seed= someFunction( seed, a, b )
        yield seed
Run Code Online (Sandbox Code Playgroud)

这可以让你这样做

a = xrange(10)
b= list(make_b(a,something))
Run Code Online (Sandbox Code Playgroud)

请注意,您经常可以使用此:

b = make_b(a)
Run Code Online (Sandbox Code Playgroud)

而不是实际创建b列表. b作为生成器函数可以节省大量存储空间(以及一些时间),因为您可能并不真正需要一个list对象.通常,您只需要可迭代的东西.

同样的a.它不一定list只是一个可迭代的东西 - 就像带有yield语句的生成器函数一样.