簡體   English   中英

從輸入生成第n個值的列表

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM