在python中使用[[v]*n]*n遇到的坑及解决

 更新时间:2022年05月13日 09:04:52   作者:范翻番樊  
这篇文章主要介绍了在python中使用[[v]*n]*n遇到的坑及解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

使用[[v]*n]*n遇到的坑

今天通过[[v]*n]*n快速创建列表, 当我使用索引修改值时, 本来是打算修改a[0][0]这一个元素的第一个值, 但是打印结果却将三个元素第一值都修改了,所以就记录一下!

遇到的问题

>> data = [[0] *3] *3
>> data
[[0, 0, 0], [0, 0, 0], [0, 0, 0]]
>> data[0][0] = 1
>> data
[[1, 0, 0], [1, 0, 0], [1, 0, 0]]

通过一番研究

>> id(data[0])
836879108296
>> id(data[1])
836879108296
>> id(data[2])  # 可以发现,三个元素使用的是同一个内存地址编号
836879108296
# 推荐使用这种方法或者使用列表推导式
>> data2 = [[1,2,3],[4,5,6],[7,8,9]]
>> id(data2[0])
836879107208
>> id(data2[1])
836879108552
>> id(data2[2])
836879109960
# 使用列表推导式
>> data3 = [[1,2] for i in range(10)]
>> data3[0][0] = 100
[[100, 2],  # 只是修改了第一个元素的第一个值
 [1, 2],
 ...
 [1, 2]]
# 查看内存地址
>> id(data3[0])
836879107528
>> id(data3[1])
836848339912

使用[[v]*n]*m遇到的问题

需求:想通过python生成m行n列的矩阵

方式1:(有问题)

data = [[0]*3]*4   #4行3列
data

输出

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

修改data[0][0]元素的值

data[0][0] = 1
data

输出

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

哇,是不是对结果很迷,为啥改变一个值会对列为0的所有元素改变呢?

解析:我们可以看下他们对应的内存指向地址

在这里插入图片描述

问题出在这里了。

方式2:

#输入
data1 = [[0 for i in range(3)] for j in range(4)]
data1
 
# 输出
[[0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0]]
  
#输入
data1[0][0] = 1
data1
 
#输出
[[1, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0]]

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 使用anaconda的pip安装第三方python包的操作步骤

    使用anaconda的pip安装第三方python包的操作步骤

    今天小编就为大家分享一篇使用anaconda的pip安装第三方python包的操作步骤,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-06-06
  • 详解python中Numpy的属性与创建矩阵

    详解python中Numpy的属性与创建矩阵

    这篇文章给大家分享了关于python中Numpy的属性与创建矩阵的相关知识点内容,有兴趣的朋友们可以学习参考下。
    2018-09-09
  • 用Q-learning算法实现自动走迷宫机器人的方法示例

    用Q-learning算法实现自动走迷宫机器人的方法示例

    这篇文章主要介绍了用Q-learning算法实现自动走迷宫机器人的方法示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-06-06
  • python基础教程之分支、循环简单用法

    python基础教程之分支、循环简单用法

    这篇文章主要介绍了python基础教程之分支、循环简单用法,结合实例形式分析了Python分支及循环语句的简单使用方法,需要的朋友可以参考下
    2016-06-06
  • 云原生Docker部署Django和mysql项目全过程

    云原生Docker部署Django和mysql项目全过程

    最近在学习用docker部署Django项目,经过百折不挠的鼓捣,终于将项目部署成功,下面这篇文章主要给大家介绍了关于云原生Docker部署Django和mysql项目的相关资料,文中通过图文介绍的非常详细,需要的朋友可以参考下
    2022-12-12
  • 详解Python如何优雅的重试

    详解Python如何优雅的重试

    这篇文章主要为大家介绍了Python如何优雅的重试详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-07-07
  • Python基础教程之pip的安装和卸载

    Python基础教程之pip的安装和卸载

    pip是一种工具,可以帮助用户安装卸载一些需要的安装包,非常的简单实用,下面这篇文章主要给大家介绍了关于Python基础教程之pip的安装和卸载的相关资料,文中通过图文介绍的非常详细,需要的朋友可以参考下
    2022-06-06
  • python 命令行传参方法总结

    python 命令行传参方法总结

    这篇文章主要介绍了python 命令行传参方法总结,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-05-05
  • python中将数据生成为Excel文件的5种方法举例

    python中将数据生成为Excel文件的5种方法举例

    工作中需要把数据导入到excel中,记录一下操作方式,这篇文章主要给大家介绍了关于python中将数据生成为Excel文件的5种方法,文中通过图文以及代码介绍的非常详细,需要的朋友可以参考下
    2023-10-10
  • Python Opencv实战之印章提取的实现

    Python Opencv实战之印章提取的实现

    很多时候我们需要电子版的章,但有些同学并不会通过Photoshop抠图获取。因此本文将利用Python OpenCV来实现印章的提取,感兴趣的可以了解一下
    2022-03-03

最新评论