python - 从输入中生成每个第 n 个值的列表

标签 python list

我有以下代码:

return [p.to_dict() for p in points]

我将其更改为仅每第 n 行打印一次:

n = 100
count = 0

output = []

for p in points:
    if (count % n == 0):
        output.append(p.to_dict())
    count += 1
return output

是否有更 pythonic 的方式来编写此代码以实现相同的结果?

最佳答案

使用 enumerate 并对修改后的列表推导中的索引取模,以过滤可被 n 整除的索引:

return [p.to_dict() for i,p in enumerate(points) if i % n == 0]

列表理解过滤很好,但在那种情况下,建议使用带有步骤的切片的 eduffy 答案更好,因为索引是直接计算的。仅当您无法预测索引时才使用过滤器部分。

进一步改进这个答案:使用 itertools.islice 会更好,这样就不会生成临时列表:

import itertools
return [p.to_dict() for p in itertools.islice(points,None,None,n)]

itertools.islice(points,None,None,n) 等同于 points[::n] 但执行惰性求值。

关于python - 从输入中生成每个第 n 个值的列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49876865/

相关文章:

python-2.7 - pandas:处理值为列表的列

Python Pandas - 选择等于的数据框列

python - 从 python 中的 pandas.DataFrame 中排除具有零值的行

python - 在python中从日期中提取月份

EF Core 中的枚举列表

算法 : Interesting diffing algorithm

Python Selenium Webdriver - 代理身份验证

python - 在 Python NumPy 中,维度和轴是什么?

Python Pandas : add list to df of different len

python:找到两个数组中两点之间的最小距离