按索引分配列表列表的元素设置列表的所有第一个元素
Assigning element of list of lists by index sets all first elements of the lists
我有一个列表,每个月有 3 个值,初始化如下:
v=[[0.0,0.0,0.0]]*12
在 2 个嵌套循环中,我想向元素添加一个值:
v[month-1][pos] += row[0]
在执行代码 month-1 = 8
和 pos = 0
的某一时刻。 row[0]
我从数据库查询得到的是 1.0
。
奇怪的是我得到了
[[1.0, 0.0, 0.0], [1.0, 0.0, 0.0], [1.0,....
所以每个子列表的第一个元素都设置为1.0
。这怎么会发生?更奇怪的是,如果我调试代码并手动设置值 v[8][0]=9
左右,它会按预期工作。
当你这样做时v=[[0.0,0.0,0.0]]*12
你会得到一个列表,其中有 12 个引用到同一个列表,要解决这个问题,请改用理解:
v = [[0.0,0.0,0.0] for _ in range(12)]
通常这样使用的 *
不应该用于可变元素。
我有一个列表,每个月有 3 个值,初始化如下:
v=[[0.0,0.0,0.0]]*12
在 2 个嵌套循环中,我想向元素添加一个值:
v[month-1][pos] += row[0]
在执行代码 month-1 = 8
和 pos = 0
的某一时刻。 row[0]
我从数据库查询得到的是 1.0
。
奇怪的是我得到了
[[1.0, 0.0, 0.0], [1.0, 0.0, 0.0], [1.0,....
所以每个子列表的第一个元素都设置为1.0
。这怎么会发生?更奇怪的是,如果我调试代码并手动设置值 v[8][0]=9
左右,它会按预期工作。
当你这样做时v=[[0.0,0.0,0.0]]*12
你会得到一个列表,其中有 12 个引用到同一个列表,要解决这个问题,请改用理解:
v = [[0.0,0.0,0.0] for _ in range(12)]
通常这样使用的 *
不应该用于可变元素。