动态调整列表的列表

时间:2014-11-22 05:56:21

标签: python

我需要一些列表,机器人列表的数量和列表的长度我不知道小修道院。列表的类型是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],[],[],[],[]]

2 个答案:

答案 0 :(得分:2)

替换:

data = [[]] * number_of_needed_lists

使用:

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

当您使用*运算符时,您实际上正在使用同一对象的副本(引用) - 这就是为什么,当您更改其中一个对象时 - 所有这些都改变了。

答案 1 :(得分:0)

首先,您不需要知道列表的长度,如果您想在列表中添加内容,只需使用list.append()
其次,您可以使用包含一组列表的列表,以便创建列表列表:

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