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)
有没有更快的方法可以做到这一点?
做:
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)
使用上述方法将使整体复杂度保持线性。