python 嵌套列表访问在循环中给出错误

python nested list access gives error in loop

我目前被这个错误困住了,我没有在 Google:

上找到解决方案(我理解的)
TypeError: list indices must be integers or slices, not tuple

我尝试做:

    for x in values:
        val1 = values[x][0]
        val2 = values[x][1]
        val3 = values[x][2]

        writer.writerow([val1,val2,val3])

values 是一个嵌套列表。 每个嵌套列表的长度都相同。

我明白这个错误,但我不明白为什么会这样,因为如果我这样做:print(values[400][0]),一切正常,没有错误,只是列表的内容。

当您使用 for x in values 时,值是 listx 表示元素,因此当您使用 values[x] 时,您试图访问 [=16] =] 按列表索引列出,这会给您带来错误 TypeError: list indices must be integers or slices, not tuple.

试试这个代码:

for x in values:
    val1 = x[0]
    val2 = x[1]
    val3 = x[2]

    writer.writerow([val1,val2,val3])

或将您的代码更改为以下以使用基于索引的访问:

for i in range(len(values)):
    val1 = values[i][0]
    val2 = values[i][1]
    val3 = values[i][2]

    writer.writerow([val1,val2,val3])

通过使用 for x in valuesx 将成为您 values 列表的子列表。如果您尝试通过调用 values[x] 来索引您的主列表,这将引发错误,因为您不能使用列表来索引列表。 你要的是这个

for x in values:
        val1 = x[0]
        val2 = x[1]
        val3 = x[2]

问题出在 for 循环上:您需要这样写以防止错误:

for x in range(len(values)):
    val1 = values[x][0]
    val2 = values[x][1]
    val3 = values[x][2]

    writer.writerow([val1,val2,val3])

更好的是,使用这个:

for x in values:
    writer.writerow([x[i] for i in range(3)])

如您所述,values 是列表的列表。

例子。 = [[1,2,3], [3,4,5], [9,10,11]]

所以当您执行 for x in values: 时,您将逐个取出每个列表,所以现在 x 是一个简单的列表。 x = [1,2,3] 在第一次迭代中。

所以,当您执行 values[x][0] 时,您正在执行 values[[1,2,3]][0],这是没有意义的,因为列表应该用数字索引。

正确的代码是

for x in values:
        val1 = x[0]
        val2 = x[1]
        val3 = x[2]
    writer.writerow([val1,val2,val3])