基本上,我想要一个花哨的oneliner,它不会将我正在查看的所有文件读入内存,但仍会处理它们,并保存了一个很好的样本.
我想做的oneliner是:
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,...]或类似的东西.
用于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)
| 归档时间: |
|
| 查看次数: |
32 次 |
| 最近记录: |