python中list*n生成多维数组与for循环生成多维数组的区别说明

作者:shangyj17 时间:2022-01-10 08:57:33 

list*n生成多维数组与for循环生成多维数组的区别

本文主要介绍生成二维数组的方法,同时解释使用list * n 方式所存在的问题。

1.从一个问题说起

先看一段代码:

list0 = [1,2,3]
list1 = [list0] * 3
print('list1 is :',list1)
list1[0][0] = 999
print('new list1 is :',list1)

结果:

python中list*n生成多维数组与for循环生成多维数组的区别说明

程序希望通过list * n 方式的方式生成一个初始的二维数组,并对其中部分值进行修改,从而产生我们希望得到的数组。

但是,当我们修改[0][0]位置的数值后,发现[1][0],[2][0]位置的数字也变成了999

原因是,当我们使用list * n 方式的时候,采用的是浅拷贝,list1[0],list1[1],list1[2]其实都是list0的浅拷贝。

当我们在上面程序中,加入下列代码:

print('list0 is ',list0)
print(list0 is list1[0])
print(list1[0] is list1[1])

python中list*n生成多维数组与for循环生成多维数组的区别说明

list0的值也随之改动了,并且,通过程序判定,list0,list1[0],list[1]其实都是一个列表。

2.正确的方式

list0 = [(i + 1) for i in range(3)]
list2 = [[(i + 1) for i in range(3)] for _ in range(3) ]
print('list2 is :',list2)
list2[0][0] = 999
print('new list2 is :',list2)

print('list0 is ',list0)
print(list0 is list2[0])
print(list2[0] is list2[1])

python中list*n生成多维数组与for循环生成多维数组的区别说明

如何动态生成多维数组

多维数组其实就是多个一维数组的嵌套,Python中有原生的list,类似一个动态数组。

所以动态生成多维数组的思想就是在list中动态嵌套添加list。

下面代码生成一个一个3×3×2的三维数组

# coding:utf-8
# 使用Python3中的print函数
from __future__ import print_function
arr = []
# 基本思想是在list中动态添加list,每个list可以嵌套,这样就可以形成多维数组了
# arr中保存的而是row的集合,row中保存的是col的集合
# 这是一个3×3×2的三维数组
for i in range(3):
    row = []
    for j in range(3):
        col = []
        col.append(i + j)
        col.append(i * j)
        row.append(col)
    arr.append(row)
print(arr)
print("Output Result:")
for i in range(3):
   for j in range(3):
       for k in range(2):
           print('[', end='')
           print(i, end=', ')
           print(j, end=', ')
           print(k, end='] = ')
           print(arr[i][j][k])

运行结果:

python中list*n生成多维数组与for循环生成多维数组的区别说明

来源:https://blog.csdn.net/qq_17753903/article/details/82927136

标签:python,list,n,多维数组,for循环
0
投稿

猜你喜欢

  • 虚拟环境及venv和virtualenv的区别说明

    2021-07-07 09:19:51
  • Python3中bytes类型转换为str类型

    2022-05-19 16:47:31
  • Python中第三方库Requests库的高级用法详解

    2022-04-10 21:25:50
  • 分发服务器 系统抛出18483错误,未能连接服务器,因为'distributor_admin'未定义远程登陆

    2024-01-24 00:39:48
  • asp我对后台安全的一些做法

    2011-09-01 19:22:09
  • python提取内容关键词的方法

    2021-07-29 00:45:37
  • Python folium的实用功能详解

    2021-08-27 10:07:21
  • Laravel操作session和cookie的教程详解

    2023-06-01 21:28:50
  • asp程序定义变量比不定义变量速度快一倍

    2012-12-04 20:06:32
  • Python实现的微信好友数据分析功能示例

    2023-09-18 06:00:21
  • 如何编写Go语言中间件的实例教程

    2024-04-25 15:29:05
  • 详解Django模版中加载静态文件配置方法

    2023-11-16 19:55:13
  • JS 调试中常见的报错问题解决方法

    2023-07-16 07:42:13
  • 当达到输入长度时表单自动切换焦点

    2024-05-02 17:29:33
  • 新兴XML处理方法VTD-XML介绍

    2008-09-04 14:42:00
  • Elasticsearch索引的分片分配Recovery使用讲解

    2022-03-25 18:00:18
  • js调用设备摄像头的方法

    2024-04-17 09:46:46
  • 用Python的urllib库提交WEB表单

    2023-06-11 00:14:52
  • Python中random模块用法实例分析

    2023-01-02 19:40:25
  • 对python3 一组数值的归一化处理方法详解

    2023-06-26 11:07:25
  • asp之家 网络编程 m.aspxhome.com