Python错误 "列表索引必须是整数",它们确实是整数
我遇到了一个问题。我有一个包含31个元素的数组,叫做colors。还有另一个数组,里面是0到31之间的整数,叫做c。我想生成一个新数组,这个新数组的值应该是colors中对应的值。
我写了:
newarray=colors[c]
但是我收到了一个错误信息:“列表索引必须是整数”,可c明明是一个整数数组。我刚开始学python,没时间去做教程,因为我只是想完成一个特定的绘图任务。有没有人能帮帮我?
谢谢
5 个回答
1
Python不支持随意的列表索引。你可以用单个整数来索引,比如c[4],或者用切片,比如c[4:10]。SciPy库提供了更丰富的索引功能。或者你可以像Douglas Leeder建议的那样,使用列表推导式。
2
这是你的代码:(来自你的评论)
from pylab import*
f=open("transformdata.txt")
x=f.readlines()
a=[y.split('\t')[0] for y in x]
b=[y.split('\t')[1] for y in x]
c=[y.split('\t')[2] for y in x] # this line is probably the problem
subplot(111,projection="hammer")
colors=['#FFFF00']*31
newarray=[colors [i] for i in c]
p=plot([a],[b],"o",mfc=color) show()
在不知道你的数据具体是什么,或者你想要实现什么的情况下,我建议你试试这个:
c=[int(y.split('\t')[2]) for y in x]
19
整数数组和单个整数是不同的。
列表的索引必须是整数,但你给的是一个整数列表。
你可能想用列表推导式:
newarray = [ colors[i] for i in c ]
编辑:
如果你仍然遇到同样的错误,那么你说的 c
是一个整数列表的说法可能是错的。
请尝试:
print type(c)
print type(c[0])
print type(colors)
print type(colors[0])
这样我们就能搞清楚你到底得到了什么类型的数据。另外,一个简短但完整的例子会很有帮助,也可能让你更了解你的问题。
编辑2:
所以如果 c
实际上是一个字符串列表,你应该提到这一点,因为字符串不会像某些其他脚本语言那样自动转换为整数。
newarray = [ colors[int(i)] for i in c ]
编辑3:
这里有一些简单的代码,展示了几个错误修复:
x=["1\t2\t3","4\t5\t6","1\t2\t0","1\t2\t31"]
a=[y.split('\t')[0] for y in x]
b=[y.split('\t')[1] for y in x]
c=[y.split('\t')[2] for y in x] # this line is probably the problem
colors=['#FFFF00']*32
newarray=[colors[int(i)] for i in c]
print newarray
a) colors
需要有32个条目。 b) 在列表推导式中,来自 c
的元素 (i
) 需要转换为整数 (int(i)
)。