2016-04-12 8 views
1

私のコードに関する質問があります。私は本当に失われています 私は右上の左下からmaxtrixから番号を出力する空の対角線リストを作成する必要がありますそれは[5、9、13、17、21]です。行列の右上から左下に対角線を印刷する2

matrix = [[ 1, 2, 3, 4, 5], 
      [ 6, 7, 8, 9, 10], 
      [11, 12, 13, 14, 15], 
      [16, 17, 18, 19, 20], 
      [21, 22, 23, 24, 25]] 

diagonal = [] 
for posi in matrix: 
    diagonal.append(posi[len(matrix)-1]) 

print diagonal 

これは私が得たものですが、最後の数値だけが出力されます。私は私が持っている

for posi in ##here##: 
    diagonal.append(##here## ##here##) 

オプションの値を変更することができます

は以下のとおりです。

matrix[posi] 
matrix 
range(len(matrix)-1) 
posi 
[len(matrix)-1] 
[len(matrix)-1-posi) 
posi 
And like [4][0], [3][1], [1],[2] 
[0,1,2,3,4] 

それを理解しようとしていると、今失われ、任意のヘルプは大歓迎ですされます

ありがとう
+0

'for po (len(matrix)-1 posi) '(len(matrix)-1)の範囲内のsi:diagonal.append(行列[pos [len(行列)-1-posi])' ']'にする必要があります – AChampion

答えて

0

これらのオプションのいずれかを使用する必要がある場合は、次のようにしてください:

for posi in [0,1,2,3,4]: 
    diagonal.append(matrix[posi][len(matrix)-1-posi]) 
+0

ありがとうございますが、私は自分の持っているオプションから選択する必要があります。別のコードを作成しないでください。 – lufee

+0

@lufee:私は今理解しています。 – Gerrat

+0

より一般的なものは 'for posi in range(len(matrix)-1)です: ' – AChampion

0

おそらくのために検索されるオプションは、おそらくですが、ここではEnumerate

diagonal = [] 
for i, j in enumerate(matrix): 
    diagonal.append(j[-(i+1)]) 

# or using list comprehension along with enumerate 
diagonal = [j[-(i+1)] for i, j in enumerate(matrix)] 

print diagonal 
0

との簡単な解決策は以下のとおりです。

for posi in range(len(matrix)): 
    diagonal.append(matrix[posi][len(matrix)-1-posi]) 

これは非常にPython的ではなく、一般的に、あなたは対行列を反復処理しますインデックスだけを使用して、バックから数えて負のインデックスを使用するので、単純なリスト内包:

diagonal = [row[-posi] for posi, row in enumerate(matrix, 1)] 
# [5, 9, 13, 17, 21] 
関連する問題