簡體   English   中英

從連續元素之間的差異小於特定數字的列表創建嵌套列表

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

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