鑑於號碼列表,像這樣:更換號碼的清單,平子範圍
lst = [0, 10, 15, 17]
我想有從i -> i + 3
元素在lst
所有i
列表。如果有重疊範圍,我希望它們合併。
所以,上面的例子中,我們首先得到:
[0, 1, 2, 3, 10, 11, 12, 13, 15, 16, 17, 18, 17, 18, 19, 20]
但在過去的2組,範圍重疊,所以在合併它們,你必須:
[0, 1, 2, 3, 10, 11, 12, 13, 15, 16, 17, 18, 19, 20]
這是我想要的輸出。
這是我想過的:
from collections import OrderedDict
res = list(OrderedDict.fromkeys([y for x in lst for y in range(x, x + 4)]).keys())
print(res) = [0, 1, 2, 3, 10, 11, 12, 13, 15, 16, 17, 18, 19, 20]
然而,這是緩慢的(10000 loops, best of 3: 56 µs per loop
)。如果可能的話,我想要一個numpy解決方案,或者比這更快的python解決方案。
是保證排序的原始元素嗎? –
@ Ev.Kounis是的。保證。 –
@折速然後你可以使用它。如果它變得更快,就可以投射到'set'然後'sort'。 –