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

作者:范翻番樊 时间:2022-02-03 10:31:35 

使用[[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的所有元素改变呢?

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

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

问题出在这里了。

方式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]]

来源:https://blog.csdn.net/u011361138/article/details/80138226

标签:python,[[v],n],n
0
投稿

猜你喜欢

  • javascript+css实现俄罗斯方块小游戏

    2024-04-23 09:28:06
  • PHP中合并数组的常见方法分享

    2023-05-25 12:02:48
  • Linux 7下脚本安装配置oracle 11g r2教程

    2024-01-13 13:35:56
  • asp javascript picasa相册外链批量导出

    2011-03-30 10:52:00
  • Python爬虫使用bs4方法实现数据解析

    2023-09-04 17:08:38
  • 走中国特色的网站重构道路

    2010-04-08 16:10:00
  • Python中def()函数的实战练习题

    2023-02-13 02:04:54
  • python实现图片素描效果

    2022-06-10 21:00:40
  • Python 格式化输出字符串的方法(输出字符串+数字的几种方法)

    2021-05-03 21:25:00
  • Cython编译python为so 代码加密示例

    2023-01-22 13:16:48
  • Django发送邮件和itsdangerous模块的配合使用解析

    2023-09-11 04:29:00
  • Python Pygame实现落球游戏详解

    2021-06-23 00:54:38
  • python实现PDF中表格转化为Excel的方法

    2022-05-31 23:46:38
  • 基于python的多进程共享变量正确打开方式

    2022-02-12 10:30:53
  • Python中的XML库4Suite Server的介绍

    2023-08-12 01:26:41
  • Keras 多次加载model出错的解决方案

    2023-11-01 20:52:35
  • 手把手教你用SQL获取年、月、周几、日、时

    2024-01-24 05:04:12
  • GoLang OS包以及File类型详细讲解

    2024-05-22 10:19:38
  • python中使用enumerate函数遍历元素实例

    2021-05-08 04:56:41
  • css可以给img元素设置背景图

    2008-09-29 15:35:00
  • asp之家 网络编程 m.aspxhome.com