在Python中向列表中的列表添加值
我对Python如此陌生,到目前为止,我唯一能编写代码的方法就是盲目地挥动键盘。因此,我相信有一个很好的理由可以解释为什么以下方法不起作用:在Python中向列表中的列表添加值,python,list,append,Python,List,Append,我对Python如此陌生,到目前为止,我唯一能编写代码的方法就是盲目地挥动键盘。因此,我相信有一个很好的理由可以解释为什么以下方法不起作用: l = [] grouping = compactlist.index(namelist[n]) l[grouping].append(start[n]) l[grouping].append(end[n]) 因此,我试图从开始列表中获取一个值,并将其添加到l中的列表中-它将是哪个列表取决于分组的值。(然后对end执行相同的操作)。这要求动态创建l中的
l = []
grouping = compactlist.index(namelist[n])
l[grouping].append(start[n])
l[grouping].append(end[n])
因此,我试图从
开始
列表中获取一个值,并将其添加到l
中的列表中-它将是哪个列表取决于分组
的值。(然后对end
执行相同的操作)。这要求动态创建l
中的列表,我认为这就是问题所在。您可以像l=[[],[]]
一样启动l,但实际上听起来更像是希望使用defaultdict作为数据结构。这可以动态创建您的列表,例如
>>> import collections
>>> thing = collections.defaultdict(list)
>>> thing[0].append('spam')
>>> thing[1].append('eggs')
>>> print thing
defaultdict(<type 'list'>, {0: ['spam'], 1: ['eggs']})
>>> thing[0]
['spam']
>>> thing[69]
[]
导入集合
>>>thing=collections.defaultdict(列表)
>>>事物[0]。追加('spam')
>>>事物[1]。追加('鸡蛋')
>>>印刷品
defaultdict(,{0:['spam'],1:['eggs']})
>>>事物[0]
[“垃圾邮件”]
>>>事物[69]
[]
尝试从
l = [[],[]]
这将为您提供一个包含两个空列表的列表,您可以使用已经编写的代码附加到其中任何一个
编辑
正如您在评论中提到的,您将需要两个以上的列表。如果您事先知道需要多少,那么您可以像这样扩展此技术:
l = [[] for x in range( number_of_lists )]
如果您事先不知道,或者如果您不一定要生成像0、1、2、3这样的好的正则数,那么您就不需要列表列表*。在这种情况下,您需要列表字典。@'在这种情况下,s的答案是最好的解决方案
*相反,您的
分组值可能是100、20000、300000等等。在这种情况下,您真的不需要列表。Ack,我的错误<代码>分组
不会只得到0或1,可能会有更多的值。很抱歉现在编辑。@lowercaseeNamel=[[]]*列表的数量几乎肯定不是您想要的。它创建一个列表,其中包含对单个空列表的引用。通常人们不希望这样,因为这样做会使l[n]的行为变得非常不直观;尝试在Python提示符下输入以下内容:l=[[]]*10;打印l;l[3]。追加('wird');打印l
。要避免@Ben所说的内容,请使用l=[[]for i in range(列表的数量)]
。如果您无法提前告知需要哪些键,这是一种方法。在顶层使用字典,而不是列表。而defaultdict意味着您不需要显式创建列表。使用dict
或defaultdict
的唯一潜在问题是键没有固有的顺序,这取决于您正在做什么以及是否(或如何)进行排序您想迭代它们的关联值。谢谢,我想我会尝试使用defaultdict。幸运的是,订购并不重要。