と番号のリストを置き換えますこのように、数字のリストを考えるとフラットサブ範囲
lst = [0, 10, 15, 17]
私はlst
内のすべてのi
ためi -> i + 3
の要素を持つリストをしたいと思います。重複する範囲がある場合は、それらをマージしてください。
ので、上記の例のために、我々は最初の取得:
[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]
これは、私の希望する出力。しかし、これは(10000 loops, best of 3: 56 µs per loop
)遅い
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]
:
これは私が考えたものです。可能であれば、私はnumpyの解決策、またはこれよりも速いpythonの解決策を希望します。
は、ソートされることが保証されている元の要素ですか? –
@ Ev.Kounisはい。保証される。 –
@Coldspeedそれを使うことができます。 'set'にキャスティングし、それが速くなると再び' sort'する。 –