这是相当直接的代码,它没有做我想做的事情.怎么了?
In [63]: c = [[]]*10
In [64]: c
Out[64]: [[], [], [], [], [], [], [], [], [], []]
In [65]: c[0]
Out[65]: []
In [66]: c[0] += [1]
In [67]: c
Out[67]: [[1], [1], [1], [1], [1], [1], [1], [1], [1], [1]]
Run Code Online (Sandbox Code Playgroud)
预期的产出是[[1], [], [], [], [], [], [], [], [], []]
.
这是一个经典的Python陷阱.
c = [[]]*10
Run Code Online (Sandbox Code Playgroud)
创建一个包含10个项目的列表.同一个精确列表中的10个项目中的每一个.因此修改一个项目会修改它们.
要创建10个独立列表,请使用
c = [[] for i in range(10)]
Run Code Online (Sandbox Code Playgroud)