我在格式标签+ numpy数组中有一些数据,如
x = ('red', array([ 0., 1., 0., ..., 0., 0., 0.]))
和一个列表[[]]和一个循环,并根据一些标准,它应将每个列表放在列表中的列表中。我尝试了list [somevalue] .append(x)但是当某些值> 0我收到错误IndexError:列表索引超出范围。我错了什么?
另外,我需要能够稍后从子列表中访问numpy数组来进行一些处理。任何人都可以帮助我吗?
答案 0 :(得分:1)
你有一个列表l
,它只包含一个元素(这个元素碰巧是另一个列表,但这里没有高度相关性),因此:
l[0] # WORKS: this is the first item in the list
l[1] # INVALID: there is no item here, so it raised an IndexError
这是其他人都在说的基本答案,我只是想说清楚。请特别注意,Python列表使用0
而不是1
的第一个元素编制索引,因此长度为1的列表在索引0处只有一个元素。
一种你可以更容易识别问题的方法就是将你使用的复合线分成两行 - 这是一种常用的调试方法,通常非常有用:
# l[1].append(x) # doing two things in the same line (accessing and element, and then appending)
temp = l[1]
temp.append(x)
此处追溯将更清楚地指出问题。
(顺便说一句,我不同意dpkp建议使用“默认列表”,因为我认为这是一个过于复杂,非标准和高级的初学者问题解决方案。相反,如果你想解决这个问题的地方自动创建一个列表以附加,请将其作为单独的问题发布,并详细说明您为什么要这样做 - 我认为您可能希望defaultdict使用整数键,但是应该等待完整的问题。)
答案 1 :(得分:1)
听起来好像是在说:如果位置L
的列表somevalue
中已有子列表,则将x
附加到其中。如果没有,请创建一个名为L[somevalue]
的新列表,其值为x
。如果是这种情况,那么你就不能直接引用那些不存在的元素而没有其他元素。
如果somevalue
始终是列表0,1,2
中的下一个元素,则可以使其与列表一起使用,但如果只有元素5
可以0,1
存在,那么你可以使用字典代替。这使您可以引用D[5]
并生成非顺序的项目,这些项目尚不存在。
D={}
D[somevalue] = D.get(somevalue,[]) + [x]
如果您将+[x]
与.get()
一起使用,则可以避免尝试.append()
到NoneType
对象时出错。
答案 2 :(得分:0)
没有发布更具体的代码,很难提供帮助。但根据您的描述,您面临的具体问题是您无法使用尚不存在的索引获取列表的值。如果以[[]]开头,那么您只有一个元素的列表,它本身就是一个没有元素的列表。所以0将是你可以通过列表[somevalue]访问的唯一索引。听起来你想要一个defaultdict(参见集合模块)或默认列表:creating a defaultlist in python