Python 将数据追加到列表中的列表
我有一些格式为label+numpy数组的数据,比如Python 将数据追加到列表中的列表,python,numpy,Python,Numpy,我有一些格式为label+numpy数组的数据,比如 x = ('red', array([ 0., 1., 0., ..., 0., 0., 0.])) 以及一个列表[[]]和一个循环,该循环通过并基于某些标准,它应该将每个循环放入列表中的一个列表中。我尝试了list[somevalue].append(x),但当somevalue>0时,我得到一个错误索引器:list index超出范围。我做错了什么 另外,我以后还需要能够从子列表中访问numpy数组以进行一些处理。有人能帮我
x = ('red', array([ 0., 1., 0., ..., 0., 0., 0.]))
以及一个列表[[]]和一个循环,该循环通过并基于某些标准,它应该将每个循环放入列表中的一个列表中。我尝试了list[somevalue].append(x),但当somevalue>0时,我得到一个错误索引器:list index超出范围。我做错了什么
另外,我以后还需要能够从子列表中访问numpy数组以进行一些处理。有人能帮我吗?如果不发布更具体的代码,很难提供帮助。但是根据您的描述,您面临的具体问题是,您无法使用尚不存在的索引获取列表的值。如果以[[]开头,则列表中只有一个元素,而该元素本身就是一个没有元素的列表。因此,0将是您可以通过列表[somevalue]访问的唯一索引。听起来您想要一个defaultdict(请参见集合模块)或defaultlist:您有一个只包含一个元素的列表(该元素恰好是另一个列表,但在这里相关性不高),因此:
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使用“默认列表”的建议)因为我认为这是一个非常复杂的、非标准的、高级的初学者问题解决方案。相反,如果你想解决这个问题,自动创建一个附加列表,请将其作为一个单独的问题发布,详细说明你为什么想要它——我想你可能想要一个使用整数键的解决方案,但是这应该等待完整的问题。)听起来像是在说:如果我的列表中
L
位置somevalue
已经有一个子列表,那么将x
附加到它上面。如果没有,则创建一个新列表,如L[somevalue]
和valuex
。如果是这种情况,那么在没有其他元素的情况下,就不能直接引用那些不存在的元素
如果somevalue
始终是列表中的下一个元素0,1,2
,则可以使其与列表一起工作,但如果当只有元素0,1
存在时它可以是5
,则可以使用字典。这使您可以引用D[5]
并按非顺序生成尚不存在的项
D={}
D[somevalue] = D.get(somevalue,[]) + [x]
如果将
+[x]
与.get()
一起使用,将避免尝试.append()
到非类型对象的错误。只需尝试以下l=[[]]x=('red',array([0,1,0.,…,0,0,0.]),然后调用l[1].append(x)您将看到相同的错误pops upSequences是基于零的。如果当somevalues>0时出现IndexError异常,则意味着您的列表只有一个元素。