终于知道python如何定义二维数组

日期:2019-08-25 12:16:59

浏览:323

核心提示:一维数组只有一个下标,称为一维数组,其数组元素也称为单下标变量。在实际问题中有很多量是二维的或多维的,因此python允许构造多维数组。

一维数组只有一个下标,称为一维数组,其数组元素也称为单下标变量。在实际问题中有很多量是二维的或多维的,因此python允许构造多维数组。那么python如何定义二维数组呢?一起来了解下吧:

python如何定义二维数组

>>> A = [0]* 3 * 4

>>> B = [[0]*3] * 4

是A还是B呢?当然是B了!还是先输出看一下:

>>> A

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

>>> B

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

不出所料,我们应该按照B = [[0]*3]*4来创建二维数组。

!!!!!!!!BUT!!!!!!!!!

当你按照上述方式来创建二维数组的时候,如果你对二维数组中的一个数进行改变,会输出什么呢?我们来试一下,比如我们把第一行的第二个数字改为2,B[0][1] = 2,输出:

>>> B

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

为什么会是这样?!!

因为list在Python中是个可变类型啊亲!按照B = [[0]*3]*4来创建二维数组只是4个指向这个空列表元素的引用,修改任何一个元素都会改变整个列表的。

另一个栗子:

>>> A = [0]*3

>>> B = A

>>> B[0] = 1

>>> A

[1, 0, 0]

坑爹啊!!

所以,在Python中创建二维数组应该这样写:

>>> C = [[0]*3 for i in range(4)]

>>> C

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

>>> C[0][1] = 2

>>> C

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

所以下次在Python中创建二维数组时候记住了:

aList = [[0] * cols for i in range(rows)]

python如何创建二维数组

创建一个宽度为3,高度为4的数组

[[0,0,0],

[0,0,0],

[0,0,0],

[0,0,0]]

myList = [[0] * 3] * 4

但是当操作myList[0][1] = 1时,发现整个第二列都被赋值,变成

[[0,1,0],

[0,1,0],

[0,1,0],

[0,1,0]]

为什么?

答案:list * n—>n shallow copies of list concatenated, n个list的浅拷贝的连接

例:

>>> lists = [[]] * 3

>>> lists

[[], [], []]

>>> lists[0].append(3)

>>> lists

[[3], [3], [3]]

[[]]是一个含有一个空列表元素的列表,所以[[]]*3表示3个指向这个空列表元素的引用,修改任何一个元素都会改变整个列表

所以需要用另外一种方式进行创建多维数组,以免浅拷贝:

>>> lists = [[] for i in range(3)]

>>> lists[0].append(3)

>>> lists[1].append(5)

>>> lists[2].append(7)

>>> lists

[[3], [5], [7]]

二维数组创建方式修改为:*

myList = [([0] * 3) for i in range(4)]

python二维数组怎么创建

(1) 暴力创建

mylist = [[0,0,0],

[0,0,0],

[0,0,0],

[0,0,0]]

(2)函数创建

def getMatrix(rows,cols):

matrix = [[0 for col in range(cols)] for row in range(rows)]

for i in range(rows):

for j in range(cols):

print matrix[i][j],

print 'n'

(3) 快速创建

myList = [([0] * 3) for i in range(4)]#初始化为0

myList = [([] * 3) for i in range(4)]#初始化为空

错误创建:myList = [[0] * 3] * 4

原因:*4只是把一维数组复制了四次引用。如果修改mylist[0][1]的值,mylist[2][1]、mylist[3][1]、mylist[4][1]的值都会变。

(4)定义一个嵌套的list表示一个二维数组,并初始化为这样:

score = [[0]*3, [0]*3,[0]*3]

print score

这样在循环外就能方便的访问每个元素了。

python定义二维数组的方法

直接定义:

a=[[1,1],[1,1]]

这里定义了一个2*2的,且初始为0的二维数组。

间接定义:

a=[[0 for x in range(10)] for y in range(10)]

这里定义了10*10初始为0的二维数组。

还有更简单的字义二维数组的方法:

b = [[0]*10]*10

定义10*10初始为0的二维数组。

与a=[[0 for x in range(10)] for y in range(10)]比较:print a==b的结果为True。

但用b的定义方法代替a后,以前的可以正常运行的程序也出错了,经过仔细分析得出区别:

a[0][0]=1时,只有a[0][0]为1,其他全为0。

b[0][0]=1时,a[0][0],a[1][0],只到a[9,0]全部为1。

由此得到大数组中的10个小的一维数据全是一个相同的引用,即指向同一地址。

故 b = [[0]*10]*10并不符合我们常规意义上的二维数组。

同类学校资讯

python怎样定义数组_终于知道python如何定义二维数组相关推荐

  1. java json 二维数组_安卓中使用Gjson解析二维数组

    String str = "{\"hot\":[{\"id\":\"1\",\"name\":\"张 ...

  2. python定义二维数组_二维数组的定义、初始化和输出,C语言二维数组详解

    本节学习二维数组.二维数组与一维数组相似,但是用法上要比一维数组复杂一点.后面的编程中,二维数组用得很少,因为二维数组的本质就是一维数组,只不过形式上是二维的.能用二维数组解决的问题用一维数组也能解决 ...

  3. pythonjson构建二维数组_python后台获取ajax传递的二维数组,保持原有数据结构不变...

    python后台获取ajax传递的二维数组,保持原有数据结构不变. 前台主要程序: arr_data = [[1,2,3],[4,5,6]];//创建二维数组 var json_data = JSON ...

  4. c语言二维数组对角线输出字符,输出二维数组对角线上的数 c语言 二维数组 对角线相加...

    1.编写程序,把下面的数据输入到一个二维数组中: 25 36 78 13 12 26 8我自己编的,用VISUAL C++6.0 测试过了 #include"stdio.h" vo ...

  5. c语言字符二维数组传参,C语言函数传递二维数组

    C语言如果给函数传递二维数组作为参数 问题的产生 先看一个传递二维数组的例子: #include void foo(int a[][], int m, int n) { int i = 1; int ...

  6. PHP常用数组函数(含按键值删除二维数组中的元素)

    // 1.array_search():在数组中搜索键值"red",并返回它的键名 $a=array("a"=>"red"," ...

  7. 遍历二维数组_Java编程基础阶段笔记 day06 二维数组

    二维数组 笔记Notes 二维数组 二维数组声明 二维数组静态初始化与二位初始化 二维数组元素赋值与获取 二维数组遍历 二维数组内存解析 打印杨辉三角 Arrays工具类 数组中常见的异常 二维数组 ...

  8. Java黑皮书课后题第8章:*8.13(定位最大的元素)编写下面的方法,返回二维数组中最大元素的位置。返回值是包含两个元素的一维数组,这两个元素表示二维数组中最大元素的行下标和列下标

    *8.13(定位最大的元素)编写下面的方法,返回二维数组中最大元素的位置.返回值是包含两个元素的一维数组,这两个元素表示二维数组中最大元素的行下标和列下标 题目 题目描述与运行示例 破题 代码 题目 ...

  9. python二维数组去重_np.unique()对一维和二维数组去重

    一维数组 对一维数组或列表,unique()函数去除其中重复元素,并按元素大小返回一个新的无重复元组或列表. import numpy as np A = [1, 2, 2, 5,3, 4, 3] a ...

  10. 二维数组 类型_「初识C语言」二维数组

    一维数组只有一个下标,称为一维数组,其数组元素也称为单下标变量.在实际问题中有很多量是二维的或多维的,因此C语言允许构造多维数组.多维数组元素有多个下标,以标识它在数组中的位置,所以也称为多下标变量. ...

最新文章

  1. 【 全干货 】5 分钟带你看懂 Docker !
  2. 《软件需求最佳实践》阅读笔记01
  3. HDU2067 小兔的棋盘
  4. kl散度的理解_以曲率的视角理解自然梯度优化
  5. 高质量C /C编程指南---第1章 文件机关
  6. jq遍历的基础语法之一
  7. 大数据技术_ 基础理论 之 大数据可视化
  8. 服务器(工作站)与普通电脑的区别?
  9. 三个字的字,值得收藏
  10. [转]数据挖掘十大经典算法
  11. python简单爬取斗图图片(自学第十天)
  12. 超小型迷你BT客户端-uTorrent(附安装教程)
  13. 这一年,我所感悟到的
  14. 狂神JavaWeb课程笔记
  15. SecureCRT上如何下载文件
  16. 手机上如何远程控制Linux服务器?
  17. Xamarin.Android 微信登录回调没有反应问题的解决办法
  18. vue+antv L7实现高德地图自定义样式和自定义marker
  19. c基础部分:怎么在for循环中 对上一次循环的值和下一次循环的值作比较
  20. linux 端口查询命令

热门文章

  1. 【数据分析】豆瓣电影Top250爬取的数据的可视化分析
  2. python 列表去重
  3. Pickit 3D视觉定位抓取系统 -硅步机器人
  4. 小米笔记本 镜像_小米笔记本Air 13.3 指纹版安装黑苹果 macOS High Sierra 10.13 教程...
  5. 保护模式下的80386及其编程04:中断及异常
  6. 混合式app开发框架
  7. PS如何快速更换logo颜色
  8. pdf文件过大怎样压缩?pdf文件如何压缩到指定大小?
  9. token是什么意思
  10. (XWZ)的python学习笔记Ⅳ——错误、调试和测试