取一个数字列表,并得到python之前的三个数字



我有这个数字列表

list1 = [15,27,48,70,83]

我想要输出

list1 = [12,13,14,15,24,25,26,27,45,46,47,48,67,68,69,70,80,81,82,83]

我知道我可以对每个数字这样做,然后将列表合并在一起并对它们进行排序

for i in range(len(list1)):
list1[i] = list1[i] - 1

有更快的方法吗?

Do:

list1 = [15,27,48,70,83]
result = [i for e in list1 for i in range(e - 3, e + 1)]
print(result)

[12, 13, 14, 15, 24, 25, 26, 27, 45, 46, 47, 48, 67, 68, 69, 70, 80, 81, 82, 83]

上面的列表理解相当于以下嵌套的for循环:

result = []
for e in list1:
for i in range(e - 3, e + 1):
result.append(i)

如果list1不排序,你可能会遇到一些问题,新货是你不需要排序的,使用heapq.merge:

from heapq import merge
list1 = [15, 70, 83, 27, 48]  # not sorted
result = list(merge(*[range(e - 3, e + 1) for e in list1]))
print(result)

使用上述方法将使整体复杂性保持线性。

@Dani已经给出了一个很好的解决方案

这里是numpy

如果你好奇的话,可以用numpy来玩

import numpy as np
# For each element add [-3, -2, -1, 0]. possible by adding extra axis
(np.arange(-3, 1) + np.array([15,27,48,70,83])[..., None]).reshape(-1)

最新更新