2016-11-12 4 views
0

range(0、le)を使用している場合、最初のコードが5,6,1の目的の結果を与えないのはなぜですか?私は最後の列のすべての値を取得するために(-1、le)を使用しなければなりませんでした。通常のリストを使用すると、forループは正常に動作します。Pythonのリストリストのforループを照会

def result(game): 
    print game 
    le = len(game)-1 
    print le 
    for i in range(0,le): 
     m = game[i][le] 
     print m 

winner = [[2, 2, 5],[2, 1, 6],[2, 1, 1]] 
result(winner) 

出力:

[[2, 2, 5], [2, 1, 6], [2, 1, 1]] 
2 
5 
6 

セカンドバージョン:

def result(game): 
    print game 
    le = len(game)-1 
    print le 
    for i in range(-1,le): 
     m = game[i][le] 
     print m 

winner = [[2, 2, 5],[2, 1, 6],[2, 1, 1]] 
result(winner) 

出力:すべてのあなたの答えのための

[[2, 2, 5], [2, 1, 6], [2, 1, 1]] 
2 
1 
5 
6 

感謝。同じコードに関する

もう一つの疑問 -

あなたは私のために別の事を明確にすることはできますか?上記のコードで下記を使用してください - >

le = len(game) 
print le 
for i in range(0,le): 

なぜ私は次のエラーが表示されますか?

Traceback (most recent call last):                                    
    File "main.py", line 10, in <module>                                   
    result(winner)                                        
    File "main.py", line 6, in result                                    
    m = game[i][le]                                        
IndexError: list index out of range 
+1

あなたが別のサイトにリンクされているスクリーンショット対ここにあなたの出力を置く必要があります。 – AChampion

+0

'range(start、stop)'には 'stop'値は含まれていません。だから、あなたの 'le'は1つ離れています。 'range(0、le + 1)'はあなたの問題を解決します。 – AChampion

+0

質問の書式に関するあなたの答えとガイダンスの両方に@AChampionをたくさん感謝します。 –

答えて

0

出力が正しく、理由はle = len(game)-1で、range(0,le)をforループで使用すると、実際には最後のインデックスに到達しません!

簡単な例取る:、印刷今あなたが1を得る2番目のケースでそう

a[0][2] ==> 5

a[-1][2] ==> 1

a=[[2, 2, 5], [2, 1, 6], [2, 1, 1]] 

をなぜならあなたはスタートよりもむしろ最後から配列を数えているからです!あなたのケースでの使用には

def result(game): 
    print game 
    le = len(game)-1 
    print le 
    for i in range(0,len(game)): 
     m = game[i][le] 
     print m 

winner = [[2, 2, 5],[2, 1, 6],[2, 1, 1]] 
result(winner) 
0

range(start, stop)startからstop-1に全ての数が含まれています 例えば

>>> list(range(0,2)) 
[0, 1] 
>>> list(range(0,3)) 
[0, 1, 2] 
0

@Itayが指摘したように、rangeには最後の値は含まれていません。正しい順序にすべてのネストされたリストをループにするために

for i in range(0,le+1): 

:あなただけにあなたのループを変更する必要があります。

ところで、2番目の解決策は、注意深く見ても、あなたの希望する解決策を提供していません。範囲を-1から開始する場合、game[-1][le]の値はgame[2][le]と同じです。したがって、基本的に最後の行から開始し、次に2番目のソリューションの1番目と2番目の行に移動します。

0

問題はrangeの2番目のパラメータである:

for i in range(inclusive, exclusive): 
    do ...