广告
返回顶部
首页 > 资讯 > 后端开发 > Python >在python中使用[[v]*n]*n遇到的坑及解决
  • 600
分享到

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

2024-04-02 19:04:59 600人浏览 独家记忆

Python 官方文档:入门教程 => 点击学习

摘要

目录使用[[v]*n]*n遇到的坑遇到的问题通过一番研究使用[[v]*n]*m遇到的问题需求:想通过python生成m行n列的矩阵使用[[v]*n]*n遇到的坑 今天通过[[v]*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]]

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。

--结束END--

本文标题: 在python中使用[[v]*n]*n遇到的坑及解决

本文链接: https://www.lsjlt.com/news/118006.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作