所以我想知道如何最好地创建一个空白列表列表:
[[],[],[]...]
由于Python在内存中使用列表的方式,这不起作用:
[[]]*n
这确实创建了[[],[],...]
,但每个元素都是相同的列表:
d = [[]]*n
d[0].append(1)
#[[1],[1],...]
类似列表理解的东西是有效的:
d = [[] for x in xrange(0,n)]
但这使用了Python VM进行循环。有没有办法使用隐式循环(利用它是用C编写的)?
d = []
map(lambda n: d.append([]),xrange(0,10))
这实际上更慢。:(
发布于 2013-04-02 20:02:32
这里有两种方法,一种甜蜜而简单(和概念上的),另一种更正式,可以在读取数据集后在各种情况下扩展。
方法1:概念性
X2=[]
X1=[1,2,3]
X2.append(X1)
X3=[4,5,6]
X2.append(X3)
X2 thus has [[1,2,3],[4,5,6]] ie a list of lists.
方法2:形式化和可扩展性
另一种优雅的方式是将列表存储为不同编号的列表-它从文件中读取。(这里的文件有数据集序列) Train是一个数据集,比如说有50行和20列。即。Train给我csv文件的第一行,train1给我第二行,依此类推。我感兴趣的是将有50行的数据集分离为一个列表,除了第0列,这是我在这里解释的变量,所以必须从原始的训练数据集中删除,然后一个接一个地扩大列表-即列表的列表。下面是实现这一点的代码。
请注意,我在内部循环中从"1“读取,因为我只对解释性变量感兴趣。我在另一个循环中重新初始化X1=[],否则X2.append([0:(len(train)-1)])将一遍又一遍地重写X1 -此外,它还会更有效地利用内存。
X2=[]
for j in range(0,len(train)):
X1=[]
for k in range(1,len(train[0])):
txt2=train[j][k]
X1.append(txt2)
X2.append(X1[0:(len(train[0])-1)])
https://stackoverflow.com/questions/5518435
复制相似问题