[英]Generate list with every nth value from input
我有以下代碼:
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
和modulo來過濾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]
但執行延遲計算。
列表切片語法采用可選的第三個參數定義“步驟”。 這需要列表中的每3個:
>>> range(10)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> range(10)[::3]
[0, 3, 6, 9]
您可以對列表理解使用enumerate
。
[p.to_dict() for i, p in enumerate(points) if i %100 == 0]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.