qq_74879241 2023-03-20 22:02 采纳率: 100%
浏览 19
已结题

为什么这个二维数组每次循环产生的数都一样(语言-python)


import random
m=[[0]*5]*4
for i in range(4):
    for j in range(5):
        m[i][j]=random.randint(4,10)
        print(m)
  • 写回答

1条回答 默认 最新

  • 爱音斯坦牛 全栈领域优质创作者 2023-03-20 22:23
    关注

    回答如下,记得采纳哦!
    初始化列表方式不对
    在初始化二维数组m时,使用了重复引用同一个子列表的方式,即将子列表复制四次,然后将这四个引用放在一个列表中。这意味着任何对这四个子列表中的任何一个子列表所做的更改都将反映在所有其他子列表中,因为它们实际上是相同的对象。
    因此,在代码的第3行中,虽然使用了[0] * 5的语法创建了一个包含5个零的子列表,但是在将其复制为四个引用的时候,每个引用都指向相同的子列表对象,而不是独立的子列表。这数组的四行也是复制的,同理!
    你可以用列表推导式快速初始化列表:

    import random
    
    m = [[0 for j in range(5)] for i in range(4)]
    for i in range(4):
        for j in range(5):
            m[i][j] = random.randint(4, 10)
    
    print(m)  # 注意这里的缩进,你写的不对
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 3月28日
  • 已采纳回答 3月20日
  • 创建了问题 3月20日

悬赏问题

  • ¥20 基于MSP430f5529的MPU6050驱动,求出欧拉角
  • ¥20 Java-Oj-桌布的计算
  • ¥15 请问如何在openpcdet上对KITTI数据集的测试集进行结果评估?
  • ¥15 powerbuilder中的datawindow数据整合到新的DataWindow
  • ¥20 有人知道这种图怎么画吗?
  • ¥15 pyqt6如何引用qrc文件加载里面的的资源
  • ¥15 安卓JNI项目使用lua上的问题
  • ¥20 RL+GNN解决人员排班问题时梯度消失
  • ¥60 要数控稳压电源测试数据
  • ¥15 能帮我写下这个编程吗