3

リスト内のリストに値を追加しようとするとエラーが発生します。私は何が間違っているのですか?

xRange = 4
yRange = 3
baseList = []
values = []
count = 0

#make a list of 100 values
for i in range(100):
    values.append(i)

#add 4 lists to base list
for x in range(xRange):
    baseList.append([])
#at this point i have [[], [], [], []]

#add 3 values to all 4 lists
    for x in range(xRange):
        for y in range(yRange):
            baseList[x][y].append(values[count])
            count += 1

print baseList

#the result i'm expecting is:
#[[0,1,2], [3,4,5], [6,7,8], [9,10,11]]

このエラーが発生します:

Traceback (most recent call last):
  File "test.py", line 19, in <module>
    baseList[x][y].append(values[count])
IndexError: list index out of range
4

2 に答える 2

5

空のリストにインデックスを付けるべきではありません。appendリスト自体を呼び出す必要があります。

これを変える:

baseList[x][y].append(values[count])

これに:

baseList[x].append(values[count])

結果:

[[0, 1, 2], [3, 4, 5], [6, 7, 8], [9, 10, 11]]

オンラインで動作することを確認してください:ideone

于 2012-12-03T22:18:43.337 に答える
1
for x in range(xRange):
    baseList.append([])
# at this point i have [[], [], [], []]

そうです、baseList = [[], [], [], []]。そのためbaseList[0][0]、最初のサブリストには要素がないため、アクセスは失敗します。

ところで。いくつかのitertoolsレシピを使用すると、指名手配リストをはるかに簡単に取得できます。

>>> x = 4
>>> y = 3
>>> list(itertools.islice(zip(*([itertools.count()] * y)), x))
[(0, 1, 2), (3, 4, 5), (6, 7, 8), (9, 10, 11)]

これは基本的に、0から始まる無期限のカウントのy-ハタのx-テイクです。

于 2012-12-03T22:20:10.020 に答える