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
时,值是 list
,x
表示元素,因此当您使用 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 values
,x
将成为您 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])
我目前被这个错误困住了,我没有在 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
时,值是 list
,x
表示元素,因此当您使用 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 values
,x
将成为您 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])