Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/358.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python错误“;列表索引必须是整数,它们是整数_Python - Fatal编程技术网

python错误“;列表索引必须是整数,它们是整数

python错误“;列表索引必须是整数,它们是整数,python,Python,我有个问题。我有一个31个元素的数组,叫做颜色。我还有另一个整数在0到31之间变化的数组,这叫做c。我想生成一个新数组,其中c中的值现在是相应的颜色值 我写道: newarray=colors[c] 但是得到错误消息“列表索引必须是整数”,但是c是一个整数数组。 我是python新手,没有时间做教程,因为我只需要它来完成特定的绘图任务。谁能帮我一下吗 谢谢整数数组!=整数 列表索引必须是整数-您已经给出了一个整数列表 您可能需要一个列表: newarray = [ colors[i] for i

我有个问题。我有一个31个元素的数组,叫做颜色。我还有另一个整数在0到31之间变化的数组,这叫做c。我想生成一个新数组,其中c中的值现在是相应的颜色值

我写道:

newarray=colors[c]

但是得到错误消息“列表索引必须是整数”,但是c是一个整数数组。 我是python新手,没有时间做教程,因为我只需要它来完成特定的绘图任务。谁能帮我一下吗


谢谢

整数数组!=整数

列表索引必须是整数-您已经给出了一个整数列表

您可能需要一个列表:

newarray = [ colors[i] for i in c ]
编辑:

如果您仍然得到相同的错误,那么您关于
c
是整数列表的断言是不正确的

请尝试:

print type(c)
print type(c[0])
print type(colors)
print type(colors[0])
然后我们就可以知道你们有什么类型的。另外,a也会有帮助,并且可能会教你很多关于你的问题的知识

编辑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)
颜色
的长度必须为32个条目。
b) 列表理解中c(
i
)中的元素需要转换为整数(
int(i)
)。

Python不支持任意列表索引。您可以使用单整数索引(如c[4])或切片(如c[4:10])。库具有更丰富的索引功能。或者用道格拉斯·利德的建议来理解列表。

好吧,我想我知道你想要什么

你有31种颜色的单子。对于参数,它是由31个字符串组成的列表,如下所示

colours = [ "Black", "DarkBlue", "DarkGreen", ... "White" ]
“c”是一个数字数组,范围在0到31之间,但顺序是随机的

import random
c = [x for x in xrange(32)]
random.shuffle(c)
# 'c' now has numbers 0 to 31 in random order
# c = [ 2, 31, 0, ... 1]
你要做的是把c中的值作为索引映射到颜色列表中,这样你就得到了一个c索引的颜色列表,并且按照这个顺序

mapped = [color[idx] for idx in c]
# mapped has the colors in the same order as indexed by 'c'
# mapped = ["DarkGreen", "White", "Black", ... "DarkBlue"]
如果这不是你想要的,那么你需要修改你的问题

我认为你有一个基本的问题,你的颜色列表应该有32个元素(颜色),而不是31个,如果列表“c”是0到31范围内所有数字的随机混合(你看,这是32个数字)。

这是你的代码:(来自你的评论)

如果不知道您的数据是什么,或者您想要完成什么,我建议您尝试以下方法:

c=[int(y.split('\t')[2]) for y in x] 

如果颜色也是
integer
s或
float
s,则使用Numpy更容易修复:

import numpy as np
newarray = np.array(colors)[c]

名为c的数组大约有6000个元素,所有元素的整数值都在0到31之间。也许您应该确切地解释一下您要做什么。断章取义,我不明白为什么调用c“c”的列表会有6000个介于0到31之间的整数值。谢谢你的帖子,但是当我像上面那样编写命令时,返回了相同的错误消息。我认为这是因为数组c的元素存储为字符串。当我键入:type(c[1])时,我收到消息“因此我想我需要将它们更改为int类型”。我在执行此操作时遇到了问题,因为我似乎无法一次全部更改它们。我想我们是同时编写的。颜色也是字符串。对不起,颜色[0]是一个字符串,两个数组都是列表。只需发布完整的代码。我们无法从这些注释猜出您在做什么。c数组有6000多个元素,范围为0-31。数据由坐标a(范围-180到180)和b(范围-90到90)组成超新星。c值描述了从一些Matlab函数返回的SN属性。我想将这些数据绘制到hammer投影图上,其中c值将由颜色渐变来描述。即,当c=0时,颜色将为黄色,当c=31时,颜色将为蓝色,所有其他值在中间线性缩放我已经按照你的建议做了,但是在画线之后我得到了信息“序列长度是6643;必须是3或4“对不起,我刚刚看到我写的东西有一个错误,最后一行应该是:p=plot([a],[b],“o”,mfc=newarray):我认为问题就在这里,我不认为它可以用newarray的相同元素来绘制每个点(a,b)。在给出错误消息时,最好告诉我们是哪一行造成了问题序列长度为6643;必须是3或4“,在开始p=plot等的行之后出现。我认为你的plot参数非常错误-mfc采用单一颜色-至少这是我阅读文档的方式,我建议在你离开原始问题时问一个新问题。
import numpy as np
newarray = np.array(colors)[c]