我有這個數字串列
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
有沒有更快的方法可以做到這一點?
uj5u.com熱心網友回復:
做:
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)
使用上述方法將使整體復雜性保持線性。
uj5u.com熱心網友回復:
@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)
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/311488.html
上一篇:python-創建一個列,其中包含來自其他列的值串列
下一篇:如何修改字典中的串列值?
