2016-05-02 12 views
1

私はPython FOR LOOPの複数の値がどのように機能するかを理解しようとしています。自分のテストを作成しようとしましたが、うまくいきません。どうして? ありがとう!複数の反復値を持つループの場合

私のテスト:

myList = [4, 5, 7, 23, 45, 65, 3445, 234, 34]         

for i, b in myList: 
    print ("first= %d, second= %d" % (i, b)) 
+3

あなたのリストに '(i、b)'のタプルがありません –

答えて

5

は、一般的な概念は、タプルのアンパックと呼ばれる

myList = [(4, 5), (7, 23), (45, 65), (3445, 234)]      

でそれを試してみてください。より簡単な例:

a, b = (1, 2) 

つまりforループは必要ありません。

+0

ありがとうございました!私はちょうどタプルのアンパックをグーグルとそれは私が不思議の目に正確に説明しています。このリンクは、誰かが興味を持っていれば、さらに徹底的に綴り出しています。http://stackoverflow.com/questions/10867882/tuple-unpacking-in-for-loops – AmericanMade

3

あなたが連続する要素のペアでリストを反復処理したい場合は、スライスを使用することができますスライスので、(あなたはまた、与えられた大きさの部分文字列を経由して、文字列を反復処理するためにこの種のものを行うことができます

>>> myList = [4, 5, 7, 23, 45, 65, 3445, 234] 
>>> for x,y in (myList[i:i+2] for i in range(0,len(myList),2)): 
    print(x,y) 

4 5 
7 23 
45 65 
3445 234 

演算子は文字列にも適用されます)。たとえば、DNAやRNAを表す文字列のコドンを反復したいときには、バイオインフォマティックスでこれを行うことができます。

+0

お知りになりたい!ありがとう! – AmericanMade

1

あなたが定義したものには、2つのイテレータがあるループがあります。

Pythonは最初の要素を選択し、それを繰り返すことができるかどうかを確認(例えばタプルまたは別のリスト)と、このiteratable elemementにbを割り当てるであろう次いでmyListの要素を反復とiこの値を割り当てます。

for i, j in l: 
    print i, j 

、あなたは

1 1

2 2

なぜでしょう。この場合

は、あなたがすることができるのは、次に mylist= [(1,1), (2,2)]

を言わせて?なぜなら、2番目の要素はイテレータであり、内部要素をループしてprint関数に吐き出すからです。あなたが別のリストから複数の変数を取得したい場合は、あなたにとても一般的な答えあなたが(例えば)

list1 = [1, 2, 3, 4] 
list2 = [5, 6, 7, 8] 
for i, j in zip(list1, list2); 
    print i, j 

(同じ長さである必要があります)

(それはループのための別の「隠れた」を行います)質問はIterators + Python magicです(これは尋ねていないことを意味します)

+0

詳細をありがとう!私は、あなたが2番目のものがイテレータである方法について少しの説明を追加したのが好きです。それは私が何が起こっているか見るのに役立ちます。 – AmericanMade

関連する問題