0

名前と数値のテキストファイルを読み込み、名前と数値の2次元配列にするプログラムを作成しようとしています。数字は1です。しかし、2次元配列のインデックスにアクセスするために書いたコードは機能せず、エラー "IndexError:list index of range"をスローします。これは動作していないコードのブロックです:Python多次元配列リストのインデックスが範囲外にある

for i in range(x): 
    list2[i][1] = int(list2[i][1]) 
    if int(list2[i][1]) == 1: 
     list2.pop(i) 

これはトレースバックです:

File "/Users/cat/PycharmProjects/myCS106/Names.py", line 16, in updateNames 
list2[i][1] = int(list2[i][1]) 
IndexError: list index out of range 

これは、リスト2のように見えるかもしれないものの例です。

[["John Doe","1"],["Jane Smith","0"],["Firstname Lastname","1"]] 

何間違っているのですが、配列内の項目の2番目の部分(この場合は番号)に正しくアクセスするにはどうすればよいですか?

+1

反復処理中にリストの長さを変更しています。それは通常常に常に問題につながる。あなたはそれをする必要があるいくつかの論理的な理由はありますか? – Luca

+0

list comprehensionは、 'pop ')なしで' 1'の値を削除するきれいな方法かもしれません: 'list_without_ones = [element2 [1]!= 1]の場合、list2の要素の の要素のための 。つまり、不要な値を除外する 'list2'のコピーを作成します –

答えて

0

あなただけのリストからいくつかの要素を削除したい場合は、あなたがIndexErrorを発生させずに項目を削除できるようにすることになる先頭に終わりから、それを繰り返すことができます:

list2 = [["John Doe","1"],["Jane Smith","0"],["Firstname Lastname","1"]] 

for i in range(len(list2) - 1, -1, -1): 
    list2[i][1] = int(list2[i][1]) 
    if int(list2[i][1]) == 1: 
     list2.pop(i) 

print(list2) 

出力:

[['Jane Smith', 0]] 

もちろん、list comprehensionを使って新しいリストを作成することもできます:

list2 = [[x[0], int(x[1])] for x in list2 if int(x[1]) != 1] 
関連する問題