中にペアを更新こんにちは、私はリストにペア上でその反復処理するコードを作成しようとしていますし、条件がPythonのリストでペアを反復処理し、反復
List=[A1,A2,A4,A5,E3,A3,E1,A7,E2,E3]
を満たす場合、これはどのような私であるペアを更新これまでにしている:この場合
def pairwise(ListX):
"Pairs -> (A1,A2), (A2,A4), (A4, A5),(A5, E3),(E3, A3),(A3, E1), ..."
a, b = tee(ListX)
next(b, None)
return izip(a, b)
for a, b in pairwise(List):
if a!= b and a == 'E':
do something and switch positions
、ペア(E3、A3)が切り替わりますし、新しい秩序は(A3、E3)になり、その後、反復処理する新しいペアがされるようになります。(E3 、E1)ではなく、(A3、E1)である。私はこれまでのアクションを作成し、リストの順序を切り替えていたコード:
List=[A1,A2,A4,A5,E3,A3,E1,A7,E2,E3] <--Initial
List=[A1,A2,A4,A5,A3,E3,E1,A7,E2,E3] <--Switched
しかしスイッチの後には、ペア(A3、E1)に反復続けます。
提案がありますか?
おかげ
あなたの提案をありがとう。私はitertools.teeをどのように効率的な(時間とメモリ)を使ってこのようにしているのかという理由で効率を心配していますか? – user3671704
私の 'pairwise'のバージョンは、' tee'を使うより効率的です。なぜなら、あなたは一つの保存された値を保持するためにキューのオーバーヘッドを必要としないからです。どちらのバージョンも(O値を反復するときは)同じ 'O(N)'時間の複雑さを持ち、どちらも一定量の余分なメモリしか使用しませんが、私のバージョンは少し速くなり、制限は 'ListX'は実際にはイテレータではなくリストである必要があるということです。 – Blckknght
私は、スイッチの後に、2つのAの最後のペア(A4、A5)から、または最初のペア(A1、A2)から反復を開始したい場合、別の質問があります。どうすればいい? – user3671704