[英]create a nested list from a list where where the difference between consecutive elements is less than a particular number
我有一個這樣的清單,
l=[1,5,6,9,14,16,17,20,21,29]
現在我想從上面的列表中創建所有可能的列表,條件是連續數字之間的距離小於三。
所以,最終的列表應該是這樣的,
l=[[1],[5,6],[9],[14,16,17],[20,21],[29]]
我可以使用 for 循環來做到這一點,但是執行時間很長,有沒有辦法以最短的執行時間來做到這一點。
最快可以做到這一點是 O(n) - 我們需要單獨查看每個元素一次。 下面的 for 循環就是這樣做的。
def consecutive_difference(lst, n):
rv = []
consec_list = [l[0]]
for x in lst[1:]:
if x - consec_list[-1] >= n:
rv.append(consec_list)
consec_list = [x]
else:
consec_list.append(x)
rv.append(consec_list)
return rv
Output
>>> consecutive_difference(l, 3)
[[1], [5, 6], [9], [14, 16, 17], [20, 21], [29]]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.