【发布时间】:2010-10-07 08:48:41
【问题描述】:
我需要逐步填充一个列表或一个列表元组。看起来像这样的东西:
result = []
firstTime = True
for i in range(x):
for j in someListOfElements:
if firstTime:
result.append([f(j)])
else:
result[i].append(j)
为了让它不那么冗长更优雅,我想我会预先分配一个空列表的列表
result = createListOfEmptyLists(x)
for i in range(x):
for j in someListOfElements:
result[i].append(j)
预分配部分对我来说并不明显。当我执行result = [[]] * x 时,我会收到x 对同一列表的引用列表,以便输出以下内容
result[0].append(10)
print result
是:
[[10], [10], [10], [10], [10], [10], [10], [10], [10], [10]]
我可以使用循环 (result = [[] for i in range(x)]),但我想知道是否存在“无循环”解决方案。
是获得我想要的东西的唯一方法
【问题讨论】:
-
可能有更好的方法来完成这一切,但仅凭这段代码很难说清楚。
-
请问,列表理解有什么问题?我不认为列表乘法更优雅或(更多)更快(尽管它可以更快,因为在乘法列表时没有实例化)。
-
对于空列表的列表,有
[ [ [] for c in range(cols) ] for r in range(rows) ]。