【问题标题】:2D list filling a whole column填充一整列的二维列表
【发布时间】:2020-05-03 13:17:20
【问题描述】:

我想要一个生成邻接矩阵的算法。输入是一维列表,它输出一个二维列表,其中包含数字的变化情况。这就是我所拥有的:

n_clusters = 5
user = [4, 4, 4, 2, 3, 3, 0, 0, 0]  # input array

movement_counts = [[0] * n_clusters] * n_clusters  # row is from, col is to

prev_label = user[0]
for label in user[1:]:
    if label != prev_label:
        movement_counts[prev_label][label] += 1
    prev_label = label

返回

[[1, 0, 1, 1, 0], 
 [1, 0, 1, 1, 0],
 [1, 0, 1, 1, 0],
 [1, 0, 1, 1, 0],
 [1, 0, 1, 1, 0]]

但我希望它返回这个:

[[0, 0, 0, 0, 0],
 [0, 0, 0, 0, 0],
 [0, 0, 0, 1, 0],
 [1, 0, 0, 0, 0],
 [0, 0, 1, 0, 0]]

为什么用数字而不是一个元素填充整列?

【问题讨论】:

  • 您能否详细说明如何根据输入用户获取此输出?

标签: python arrays list adjacency-matrix


【解决方案1】:

替换:

movement_counts = [[0] * n_clusters] * n_clusters

与:

movement_counts = [[0] * n_clusters for _ in range(n_clusters)]

因为,movement_counts = [[0] * n_clusters] * n_clusters 生成的列表包含指向内存中相同引用的子列表,因此如果您更改任何子列表中的任何元素,所有子列表都会发生更改。

【讨论】:

    猜你喜欢
    • 2023-03-21
    • 1970-01-01
    • 2019-11-29
    • 1970-01-01
    • 2017-03-20
    • 2020-08-02
    • 2021-03-11
    • 2022-01-02
    • 1970-01-01
    相关资源
    最近更新 更多