列表的动态大小列表
我需要一些列表,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],[],[],[],[]]
替换:
data = [[]] * number_of_needed_lists
有:
data = [[] for i in range(number_of_needed_lists)]
,当你使用*
操作,你实际上是使用相同对象的副本(参考) - 这就是为什么,当你改变其中之一 - 所有这些都改变了。
天才!现在速度快了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))
是不是list.apend()与list + = []相同? – Bastiaan 2014-11-22 15:50:15
你为什么不使用'csv'? – 2014-11-22 05:58:19
@ IgnacioVazquez-Abrams我忘了,前段时间我改变了这个,因为CSV没有做我所需要的。我可以再试一次,它会解决这个问题吗?仍然,好奇如何使它以这种方式工作。 – Bastiaan 2014-11-22 06:02:23