2016-05-15 6 views
0

に満たされながら反復は二つのリストの上に、私は私がzipを使用してそれらを反復処理I-1の条件はPython

list1 = [0, 6, 22, 29] 
list2 = [3, 38, 48] 

私の条件を満たしているペアを選択するために、ペアごとの方法で反復処理したい二つのリストを持っています:

for i, j in list(zip(list1, list2)): 
    print(i, j) 

これは

0 3 
6 38 
22 48 

これは正常に動作しますが、私はbにしたいを返します ペアの最初の値(i)が前のペアの最後の値(j)より大きい場合にのみ、ペアを返す必要があります。

この場合、最初の2つのペアは正しいですが、226:48に含まれているため、3番目のペアは正しくありません。

このロジックをループに組み込むにはどうすればよいですか?

+0

をまたは出力から除外されていない以前のペア? –

+0

これは、フィルタリングされていないzip結果の前のペアを意味します(2番目のペア以降でのみ実行可能です)。 x番目のペアは、x-1番目のペアの2番目の値に対して評価されます。 –

+0

整数は正であることが保証されていますか? – schwobaseggl

答えて

1

まずは、それを反復するだけでzip()list()にキャストする必要はありません。

次に、比較のために使用できるzip()に3番目のリストを追加できます。 list1list2をスライスすることができます。これは、比較する「前のペアの最後のjの値」がないためです。

第3引数のlist2が条件の確認に使用されます。反復中、要素kは "1つ後のインデックス"なので、最後に見つかったjと等しくなります。

for i, j, k in zip(list1[1:], list2[1:], list2): 
    if i > k: 
     print(i, j) 

あなたが最初のペアを含める必要がある場合、あなたは@schwobasegglで見つかったこの素敵なトリックを使用することができます、あなたはフィルタリングされていないのzip結果の前のペアを意味するか、「前の対」と

for i, j, k in zip(list1, list2, [-1] + list2): 
    if i > k: 
     print(i, j) 
+0

これは最初のペアを見逃しませんか? – schwobaseggl

+0

これは達成したいことに非常に近いです。それでも、 '0'と' 3'の最初のペアを除外します –

+0

@ben_aaron比較する最後の 'j'値がないので、除外します。とにかくそれが含まれてほしいですか? – Delgan