我需要逐步填充一个列表或一个列表元组。看起来像这样的东西:
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)]
),但我想知道是否存在“无循环”解决方案。
是获得我想要的东西的唯一方法
最佳答案
result = [list(someListOfElements) for _ in xrange(x)]
这将创建 x 个不同的列表,每个列表都有一个 someListOfElements
列表的副本(该列表中的每个项目都是引用,但其所在的列表是一个副本)。
如果更有意义,请考虑使用 copy.deepcopy(someListOfElements)
生成器和列表推导和事物被认为是非常pythonic。
关于memory-management - 如何在 Python 中创建空列表的列表或元组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3880037/