2024-04-20 16:39:04 发布
网友
我有一张这样的清单
l=[1,5,6,9,14,16,17,20,21,29]
现在我想从上面的列表中创建所有可能的列表,条件是连续数字之间的距离小于3
所以最后的名单应该是这样的
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
输出
>>> consecutive_difference(l, 3) [[1], [5, 6], [9], [14, 16, 17], [20, 21], [29]]
你能做的最快的是O(n)-我们需要单独查看每个元素一次。下面的for循环就是这样做的
输出
相关问题 更多 >
编程相关推荐