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中的元素..对不起伙计们.然而,我之前的问题的解决方案对我也有其他问题非常有帮助.谢谢.
考虑一下
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语句的生成器函数一样.