列表的动态大小列表

列表的动态大小列表

问题描述:

我需要一些列表,bot列表的数量和列表的长度,我不知道priory。列表的类型是str。我怎样才能以有效的方式做到这一点?列表的动态大小列表

我想:

data = [[]] * number_of_needed_lists 
for line in f.readlines(): 
    columns = line.split(',') 
     for i, dta in enumerate(data): 
      data[i] = dta + [columns[i]] 

但这是非常缓慢的。我尝试了一个类似的结构,但有一个列表字典,类似的结果。

此外,我发现以下奇怪现象:

a = [[]] * 5 
a[0] += [1] 
a 
==> [[1], [1], [1], [1], [1]] 
expected: [[1],[],[],[],[]] 
+0

你为什么不使用'csv'? – 2014-11-22 05:58:19

+0

@ IgnacioVazquez-Abrams我忘了,前段时间我改变了这个,因为CSV没有做我所需要的。我可以再试一次,它会解决这个问题吗?仍然,好奇如何使它以这种方式工作。 – Bastiaan 2014-11-22 06:02:23

替换:

data = [[]] * number_of_needed_lists 

有:

data = [[] for i in range(number_of_needed_lists)] 

,当你使用*操作,你实际上是使用相同对象的副本(参考) - 这就是为什么,当你改变其中之一 - 所有这些都改变了。

+0

天才!现在速度快了30倍,可以接受。我希望我对这个参考业务有透彻的了解。我明白什么是参考,但要了解幕后发生的情况,... – Bastiaan 2014-11-22 06:10:18

首先,你不需要知道列表的长度,如果你想添加一些东西到列表中,你可以简单地使用list.append()
其次,你可以使用包含了一组列表,所以创建listoflists列表:

listoflists = [] 
for i in range(1, number_of_needed_lists): 
    listoflists.append((range(i), 0)) 
+0

是不是list.apend()与list + = []相同? – Bastiaan 2014-11-22 15:50:15