将数据附加到列表中的列表

时间:2014-03-29 23:20:00

标签: python numpy

我在格式标签+ numpy数组中有一些数据,如

 x = ('red', array([ 0.,  1.,  0., ...,  0.,  0.,  0.]))

和一个列表[[]]和一个循环,并根据一些标准,它应将每个列表放在列表中的列表中。我尝试了list [somevalue] .append(x)但是当某些值> 0我收到错误IndexError:列表索引超出范围。我错了什么?

另外,我需要能够稍后从子列表中访问numpy数组来进行一些处理。任何人都可以帮助我吗?

3 个答案:

答案 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