2016-10-11 9 views
0

以下、set1、set2、set3はlen(setn)= len(index)のリストです。次のように私は、私はインデックス」に続いて、(下記のとおり)「インデックス、SET1」の各要素を出力した結果を取得できますかPythonで複数のリストをループする方法

index = range(10) 
set1 = range(10,20) 
set2 = range(30,40) 
set3 = range(40,50) 
listset = [set1, set2, set3] 
for i in listset: 
    for k, j in zip(index, i): 
    print k, j 

Result: 
0 s 
1 e 
2 t 
3 1 
0 s 
1 e 
2 t 
3 2 
0 s 
1 e 
2 t 
3 3 

、これらのリスト(SETN)のそれぞれをループにしたいですset2 "、" index、set3 "が続きます。

0 10 
1 11 
2 12 
3 13 
4 14 
5 15 
6 16 
7 17 
8 18 
9 19 
and so on... 
+0

あなたのforループは期待される結果を得るために働きます、何を探していますか? – Boud

+2

申し訳ありませんが、私の質問の編集があなたの問題を解決したと思います。 –

+0

正しく編集された投稿(実際の変数名 'set1'をリテラル' set1''etcに置き換えてください(アポストロフィはなくなりました;-) – Dilettant

答えて

1

をあなたはenumerateを組み合わせたいとitertools.chain

from itertools import chain 
s1 = range(10) 
s2 = range(10, 20) 
s2 = range(20, 30) 
c = chain(enumerate(s1), enumerate(s2), enumerate(s3)) 
for i, n in c: 
    print(str(i).ljust(4), n) 
+0

このチェーンの仕組みを簡単に説明してください。たとえば、 "for i in c:print i"を試してみましょう。これは同じ結果を別の書式で出力します。 nを指定して単純にiを出力するc? – gogo

+0

@gogoの最初の(または特定の)セット(s1、s2)のみを表示する方法 'chain'に任意の数のイテレータを与えます。そのイテレータからの値消耗するですから、最初に 's1'から' s2'などからすべてのものを取得します。 'c'の' s1'と 's2'だけが必要な場合は、' s3'の最初の値かどうかを確認するためにすべての値をチェックするか、 'cの定義から' s3'を除外する必要があります –

+0

@gogo 'list(enumerate([10、11、12]))'の出力を見ると、 '((0、10)、(1,11)、(2、12)] '。列挙型は、シーケンス中の各要素を '(index、element)'のタプルで置き換えます。ここで、 'index'はリスト内のその要素のインデックスです。したがって' for i in c: '、' i'それらのタプルに等しい。 'for i、n in c:'と書くと、 'i'がインデックス、' n'が要素になるように、自動的にタプルをアンパックします。 –

1

あなたが一緒にSET1、2と3を連結することができ、その後、itertools.cycle(インデックス)を使用し、得られ二つのことを一緒にジップ: zip(itertools.cycle(index), set1 + set2 + set3)

関連する問題