我有这个数字列表
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)