取一个数字列表并在python之前获取三个数字

use*_*242 2 python sorting list

我有这个数字列表

list1 = [15,27,48,70,83]
Run Code Online (Sandbox Code Playgroud)

我想要输出

list1 = [12,13,14,15,24,25,26,27,45,46,47,48,67,68,69,70,80,81,82,83]
Run Code Online (Sandbox Code Playgroud)

我知道我可以对每个数字执行此操作,然后将列表合并在一起并对它们进行排序

for i in range(len(list1)):
    list1[i] = list1[i] - 1
Run Code Online (Sandbox Code Playgroud)

有没有更快的方法可以做到这一点?

Dan*_*ejo 6

做:

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

result = [i for e in list1 for i in range(e - 3, e + 1)]
print(result)
Run Code Online (Sandbox Code Playgroud)

输出

[12, 13, 14, 15, 24, 25, 26, 27, 45, 46, 47, 48, 67, 68, 69, 70, 80, 81, 82, 83]
Run Code Online (Sandbox Code Playgroud)

上面的列表推导式等价于下面的嵌套 for 循环:

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

如果不排序,您可能会遇到一些问题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)
Run Code Online (Sandbox Code Playgroud)

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