python – 为列表保留空间

我必须使list2使用list1中的名称,但list1中的名称数量可以变化.

foo = ['spam', 'eggs']
bar = [['spam', ['a', 'b']], ['eggs', ['c', 'd']]]

所以,我保留吧

bar = [[None] * 2] * len(foo)

并通过循环从list1复制名称

 bar[i][0] = foo[i]

但结果是每个子列表中的名称都是这样的

bar = [['eggs', ['a', 'b']], ['eggs', ['c', 'd']]]

我试着保留

bar = [[None, None], [None, None]]

并没有任何问题.所以我认为问题来自于我如何保留列表.

我怎样才能解决这个问题.如果您不懂我的英语,请询问.谢谢.

最佳答案 像这样创建你的第二个列表:

list2 = [[None]*2 for x in range(len(list1))]

或者,如果由于某种原因你不喜欢使用理解,你可以这样做

list2 = []
for x in range(len(list1)):
    list2.append([None,None])

问题是当你做某事时

[listItem] * numCopies

你得到一个包含相同listItem的numCopies副本的列表,所以你的子列表都是相同的 – 当你更改一个时,你可以更改它们.

我建议的方式将创建包含相同内容的唯一列表(两个无副本).因此,更改其中一个子列表不会改变任何其他子列表.

点赞