2017-11-08 31 views
0

私はここの構文を理解し、トラブルを抱えています。Pythonのネストされたリストの内包(ネストされた要素にアクセスする)

matrix_a = [[1, 2], [3, 4], [5, 6]] 
matrix_b = [[1, 2, 3], [4, 5, 6], [7, 8, 9]] 

[a for a, b in matrix_a] 

出力:[1, 3, 5]

[a for b, a in matrix_a] 

出力:[2, 4, 6]

私はリスト内包表記がどのように機能するかについて少し理解しますが、ネストされた内の特定の要素にアクセスするとき、私は構文を理解していませんリスト。

私はこの構文のまわりで私の頭をラップすることはできません。この構文はどのように機能していますか?カンマは何を表していますか? a for aは何を意味するのでしょうか?あなたは何がボンネットの下で起こっているのか説明できますか?あなたは見やすいかもしれないforループに変換する場合は、最終的にどのようにmatrix_b

+0

重複してリストされた質問は、ネストされたリスト内包に関するものですが、この質問はそれに関するものではありません。 – thebjorn

答えて

2

でこれを行うだろうか..?

res = [] 
for item in matrix_a: 
    a, b = item # a = item[0]; b = item[1] 
    res.append(a) 

あなたは基本的に、リスト内の個々のアイテムをアンパックし、それらの1つを選択しています。

+0

は、これはどのようにMATRIX_Bのためのリスト内包表記のようになりますか? –

+1

matrix_bの場合も同じですが、3つの瓶を開梱します '[a、b、cはmatrix_b]' –

+1

です。私はそれを2つの別々の文「a for a」と「b in matrix_a」と読みました。うわーことを明確にするための感謝:D君たちは素晴らしいです。 –

0

私は[MATRIX_Aで、B用]論理的であるに戻り、[1 2 4]、ネストされた各リスト項目の最初の要素を返す

Outputスクリーンショット

を参照してくださいあなたがここに を出力を書面で間違っていると思います
+0

イメージを使用する代わりに、テキストをコピーできました。また、これは_answer_ ..のようには見えません。 – thebjorn

0

だけで、このように理解:

[a for b, a in matrix_a] #as 
[a for [a, b] in matrix_a] #or 
[a for (a, b) in matrix_a] 
#matrix_a has elements as list of length 2 each 
#so your list comprehenssion says, give me a output list -- having first element'a' from each element of matrix_a(whose each element represented as [a,b] type, with comma, becomes tuple (a,b)), 
# then from [b,a] give me a, that is 2nd element 
# and it will fail if you apply same on matrix_b, cause each element of matrix_b is not of type [a,b] i:e of length 2 
# you will get "ValueError: too many values to unpack" 

は何かが明確でない場合は、私に教えてください。ありがとう。