for loop保存到数组但跳过保存元素

Der*_*den 3 python python-3.x

基本上,我想要一个花哨的oneliner,它不会将我正在查看的所有文件读入内存,但仍会处理它们,并保存了一个很好的样本.

我想做的o​​neliner是:

def foo(findex):
    return [bar(line) for line in findex] # but skip every nth term
Run Code Online (Sandbox Code Playgroud)

但我希望能够不能保存每一行.即,我仍然希望它运行(用于字节位置),但我不想保存图像,因为我没有足够的内存.

所以,如果bar(line)的输出是1,2,3,4,5,6,...我希望它仍然可以继续运行,1,2,3,4,5,6,...但我希望返回值为[1,3,5,7,9,...]或类似的东西.

Jea*_*bre 5

用于enumerate获取索引,以及使用模数来过滤所有其他行的过滤器:

return [bar(line) for i,line in enumerate(findex) if i%2]
Run Code Online (Sandbox Code Playgroud)

笼统地说有i%n所以每次索引是整除n然后i%n==0和bar(line)不发到listcomp.

enumerate适用于每个可迭代的(文件句柄,生成器...),因此它比使用更好range(len(findex))

现在,如果你想打电话给上面是不正确bar的所有的值(因为你需要所产生的副作用bar),因为过滤器阻止执行.因此,您必须在2次传递中执行此操作,例如使用map将函数应用于所有项目findex并仅选择您感兴趣的结果(但它保证所有行都已处理)使用相同的模数过滤器但是之后执行:

l = [x for i,x in enumerate(map(bar,findex)) if i%n]
Run Code Online (Sandbox Code Playgroud)