私はリストとして入力し、元のリストから隣接する要素のタプル(またはサブリスト)を含む別のリストを作成し、終了要素。入力/出力は次のようになります。Pythonの別のリストの隣接する要素のリストを作成します
l_in = [0, 1, 2, 3]
l_out = [(3, 0, 1), (0, 1, 2), (1, 2, 3), (2, 3, 0)]
私の質問は密接に別題しgetting successive adjacent elements of a listに関連しているが、この他の質問は終わり要素の折り返しを考慮に入れると、要素だけではなく、トリプレットのペアを処理しません。 。私はおそらくよりエレガント(および/または効率的な)を使用して、これを実行する方法があるように感じる、
from collections import deque
l_in = [0, 1, 2, 3]
deq = deque(l_in)
deq.rotate(1)
deq_prev = deque(deq)
deq.rotate(-2)
deq_next = deque(deq)
deq.rotate(1)
l_out = list(zip(deq_prev, deq, deq_next))
# l_out is [(3, 0, 1), (0, 1, 2), (1, 2, 3), (2, 3, 0)]
をしかし:
私はdequeのを回転させ、それらを一緒にビュン関与するこれを行うには、やや長いアプローチを持っています他の組み込みのPythonの機能たとえば、の機能がdeque
の場合、回転リストを所定の位置に変更する代わりに返した場合、これは1本または2本のライナーになる可能性があります(回転リストを一緒に圧縮するこのアプローチはおそらく最も効率的ではありません)。これをよりエレガントに、かつ/または効率的に達成するにはどうすればよいですか?
:
more-itertools
簡単に介してインストール、別のライブラリです。 'list(zip(* range [n)]))'のzip(* [lst [i + p:] + lst [:i + p])に返されるものを単純化することができます。 – Grayscale'n> len(lst)'のように 'n 'を指定すると、最初の要素が各タプルの末尾にある充填値として使用されるという予期しない振る舞いのように思えます(最後の'あなたが見せている腐敗(txt、6、0) 'を繰り返します。 – Grayscale