異なるサイズの2つのリストを反復したいが、同じペースでは反復しない(私は並列反復の答えしか見つけなかった)。たとえば、同じ種類の要素を含む2つのソート済みリストを考えてみましょう。これらは、2つのリストの共通のトラバーサルを使用して、1つのリストまたは両方のリストにあるという事実に従って要素に対して何かしたいと考えています。異なるサイズの2つのリストを反復処理するときにStopIteration例外を処理します
インデックスを使用してその方法を知っていましたが、イテレータで正しく行う方法はありますか?
呼び出すとStopIterationが発生したlist1=[...]
list2=[...]
it1=iter(list1)
it2=iter(list2)
try:
while True:
e1=it1.next()
e2=it2.next()
while compare(e1,e2):
doSomething1(e1)
e1=it1.next()
while compare(e2,e1):
doSomething2(e2)
e2=it2.next()
doSomething3(e1,e2)
except StopIteration:
pass
# do something with the rest of the list that is at end
、私は最後にあるリストを知らないと私は残りの要素にアクセスする方法がわからない:(次の呼び出し
私はの線に沿って何かを持っています)が例外をチェックすると、長いリストの要素をスキップし、直接e1にアクセスするか、e2を使用すると、短いリストの最後の要素にもう一度アクセスできるようになります。
私は(次の各周りを除いて/試しを持つようないくつかの回避策を)想像しますが、すべて私のアイデアすることができますだけでインデックスを使用するよりも、より複雑なようだ...
上記のコードの簡単な作業たとえば、
def compare(e1,e2): return e1<e2
def doSomething1(e1): print "list1: %d"%e1
def doSomething2(e1): print "list2: %d"%e1
def doSomething3(e1,e2): print "common: %d"%e1
list1=[1,2,5,6,8,10,23,56]
list2=[3,4,5,10]
通常、リストに「None」値がない場合は、他のリストの長さに一致するように短いリストを 'None'で埋め込むことができます。 – Selcuk
私は2つのイテレータを並行して進めたくないので、助けてくれるとは思わない。 – romaric