从连续元素之间的差异小于特定数值的列表创建嵌套列表

2024-04-20 16:39:04 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一张这样的清单

 l=[1,5,6,9,14,16,17,20,21,29]

现在我想从上面的列表中创建所有可能的列表,条件是连续数字之间的距离小于3

所以最后的名单应该是这样的

l=[[1],[5,6],[9],[14,16,17],[20,21],[29]]

我可以使用for循环来实现这一点,但是执行时间很长,有没有办法用最短的执行时间来实现呢


Tags: 距离列表for时间数字条件名单办法
1条回答
网友
1楼 · 发布于 2024-04-20 16:39:04

你能做的最快的是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

输出

>>> consecutive_difference(l, 3)
[[1], [5, 6], [9], [14, 16, 17], [20, 21], [29]]

相关问题 更多 >