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

python嵌套列表访问在循环中出现错误,python,nested-lists,Python,Nested Lists,我目前被困在这个错误上,我没有在谷歌上找到解决方案(我理解): 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])

我目前被困在这个错误上,我没有在谷歌上找到解决方案(我理解):

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])
是一个嵌套列表。 每个嵌套列表具有相同的长度


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

当你在值中为x使用
,其中值是一个
列表时,
x
代表元素,所以当你使用
值[x]
,您正试图通过一个列表索引访问
列表,该索引给出错误
类型错误:列表索引必须是整数或切片,而不是元组

请尝试以下代码:

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])

当您在值中为x使用
时,其中值是一个
列表
x
表示元素,因此当您使用
值[x]
时,您试图通过一个列表索引访问
列表,该列表索引给出错误
类型错误:列表索引必须是整数或切片,而不是元组

请尝试以下代码:

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])

通过对值中的x使用
x
将成为值列表的子列表。如果您试图通过调用
values[x]
为主列表编制索引,这将抛出一个错误,因为您无法使用列表为列表编制索引。 你想要的是这个

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

通过对值中的x使用
x
将成为值列表的子列表。如果您试图通过调用
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)])

问题在于
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]]

因此,当您对值中的x执行
时:
,您将逐个取出每个列表,因此现在x是一个简单的列表。 在第一次迭代中x=[1,2,3]

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

正确的代码是

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

正如您所提到的,
values
是一个列表列表

例如[1,2,3],[3,4,5],[9,10,11]]

因此,当您对值中的x执行
时:
,您将逐个取出每个列表,因此现在x是一个简单的列表。 在第一次迭代中x=[1,2,3]

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

正确的代码是

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

这很有道理,感谢您解释这很有道理,感谢您解释建议使用
range(len(value))
不是pythonic。建议使用
range(len(value))
不是pythonic。如果您对其中一个答案感到满意,请您接受其中一个答案。如果您对其中一个答案感到满意,请您接受其中一个答案。