我有以下代码:
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/