【发布时间】:2017-09-16 05:18:27
【问题描述】:
我正在尝试制作一个生成器,它可以返回列表中的多个连续项目,该列表仅“移动”一个索引。类似于 DSP 中的移动平均滤波器。例如,如果我有列表:
l = [1,2,3,4,5,6,7,8,9]
我希望这个输出:
[(1,2,3),(2,3,4),(3,4,5),(4,5,6),(5,6,7),(6,7,8),(7,8,9)]
我已经编写了代码,但它不适用于过滤器和生成器等。如果我需要提供大量单词,恐怕它也会因内存而中断。
函数gen:
def gen(enumobj, n):
for idx,val in enumerate(enumobj):
try:
yield tuple(enumobj[i] for i in range(idx, idx + n))
except:
break
以及示例代码:
words = ['aaa','bb','c','dddddd','eeee','ff','g','h','iiiii','jjj','kk','lll','m','m','ooo']
w = filter(lambda x: len(x) > 1, words)
# It's working with list
print('\nList:')
g = gen(words, 4)
for i in g: print(i)
# It's not working with filetrs / generators etc.
print('\nFilter:')
g = gen(w, 4)
for i in g: print(i)
的列表不会产生任何东西。代码应该中断,因为无法索引过滤器对象。当然,其中一个答案是强制列出:list(w)。但是,我正在为该函数寻找更好的代码。如何更改它以便函数也可以接受过滤器等。我担心列表中大量数据的内存。
谢谢
【问题讨论】:
标签: python-3.x generator