Skip to main content
 首页 » 编程设计

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

2025年05月04日11lidabo

我有以下代码:

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] 但执行惰性求值。