python - for循环保存到数组但跳过保存元素

标签 python python-3.x

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

我想做的o​​neliner是:

def foo(findex):
    return [bar(line) for line in findex] # but skip every nth term

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

所以,如果 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]

i%n 概括它,所以每次索引都可以被 n 整除,然后 i%n==0 bar(line) 未发布到 listcomp 中。

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

现在,如果你想在 所有 值上调用 bar,那么上面的代码是不正确的(因为你需要 bar 产生的副作用) ,因为过滤器阻止执行。所以你必须分两次完成,例如使用 map 将你的函数应用于 findex 的所有项目并只选择你感兴趣的结果(但它保证 所有 行都被处理)使用相同的模过滤器但是执行之后:

l = [x for i,x in enumerate(map(bar,findex)) if i%n]

关于python - for循环保存到数组但跳过保存元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45332566/

相关文章:

python - 如何使用 Django 映射音频文件?

Python len() 函数再添加 1 个

python - 如何使用 conda 在 GoogleColab 中永久安装包?

python - Python 使用 Curses 显示所有可用颜色对时出现问题

python - "and"在变量赋值中的用例

用于测试具有附加依赖项的模块的 Python 导入

python - python 可执行文件中的 kwargs

python - Django 的@login_required 装饰器在人们未注册时将他们重定向到/accounts/login。如何更改此网址?

python - Keras - LeakyReLU保存模型时没有属性名错误

python - Pandas df.to_csv ("file.csv"encode ="utf-8")仍然为减号提供垃圾字符