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。如果您对其中一个答案感到满意,请您接受其中一个答案。如果您对其中一个答案感到满意,请您接受其中一个答案。