喜期間對我試圖做出了對迭代列表中的一個代碼,如果條件滿足迭代通過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(N)時間複雜度相同(對N個值進行迭代時)並且都只使用恆定數量的額外內存,但是我懷疑我的版本會更快一些,並且使用的內存會稍微少一些。限制是'ListX'確實需要是一個列表,而不是迭代器。 – Blckknght
我還有一個問題,在這種情況下,我希望迭代從最後一對兩個A(A4,A5)開始,或者從第一對(A1,A2)開始;我怎麼能這樣做? – user3671704