python怎样定义数组_终于知道python如何定义二维数组
终于知道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如何定义二维数组相关推荐
- java json 二维数组_安卓中使用Gjson解析二维数组
String str = "{\"hot\":[{\"id\":\"1\",\"name\":\"张 ...
- python定义二维数组_二维数组的定义、初始化和输出,C语言二维数组详解
本节学习二维数组.二维数组与一维数组相似,但是用法上要比一维数组复杂一点.后面的编程中,二维数组用得很少,因为二维数组的本质就是一维数组,只不过形式上是二维的.能用二维数组解决的问题用一维数组也能解决 ...
- pythonjson构建二维数组_python后台获取ajax传递的二维数组,保持原有数据结构不变...
python后台获取ajax传递的二维数组,保持原有数据结构不变. 前台主要程序: arr_data = [[1,2,3],[4,5,6]];//创建二维数组 var json_data = JSON ...
- c语言二维数组对角线输出字符,输出二维数组对角线上的数 c语言 二维数组 对角线相加...
1.编写程序,把下面的数据输入到一个二维数组中: 25 36 78 13 12 26 8我自己编的,用VISUAL C++6.0 测试过了 #include"stdio.h" vo ...
- c语言字符二维数组传参,C语言函数传递二维数组
C语言如果给函数传递二维数组作为参数 问题的产生 先看一个传递二维数组的例子: #include void foo(int a[][], int m, int n) { int i = 1; int ...
- PHP常用数组函数(含按键值删除二维数组中的元素)
// 1.array_search():在数组中搜索键值"red",并返回它的键名 $a=array("a"=>"red"," ...
- 遍历二维数组_Java编程基础阶段笔记 day06 二维数组
二维数组 笔记Notes 二维数组 二维数组声明 二维数组静态初始化与二位初始化 二维数组元素赋值与获取 二维数组遍历 二维数组内存解析 打印杨辉三角 Arrays工具类 数组中常见的异常 二维数组 ...
- Java黑皮书课后题第8章:*8.13(定位最大的元素)编写下面的方法,返回二维数组中最大元素的位置。返回值是包含两个元素的一维数组,这两个元素表示二维数组中最大元素的行下标和列下标
*8.13(定位最大的元素)编写下面的方法,返回二维数组中最大元素的位置.返回值是包含两个元素的一维数组,这两个元素表示二维数组中最大元素的行下标和列下标 题目 题目描述与运行示例 破题 代码 题目 ...
- python二维数组去重_np.unique()对一维和二维数组去重
一维数组 对一维数组或列表,unique()函数去除其中重复元素,并按元素大小返回一个新的无重复元组或列表. import numpy as np A = [1, 2, 2, 5,3, 4, 3] a ...
- 二维数组 类型_「初识C语言」二维数组
一维数组只有一个下标,称为一维数组,其数组元素也称为单下标变量.在实际问题中有很多量是二维的或多维的,因此C语言允许构造多维数组.多维数组元素有多个下标,以标识它在数组中的位置,所以也称为多下标变量. ...
最新文章
- 【 全干货 】5 分钟带你看懂 Docker !
- 《软件需求最佳实践》阅读笔记01
- HDU2067 小兔的棋盘
- kl散度的理解_以曲率的视角理解自然梯度优化
- 高质量C /C编程指南---第1章 文件机关
- jq遍历的基础语法之一
- 大数据技术_ 基础理论 之 大数据可视化
- 服务器(工作站)与普通电脑的区别?
- 三个字的字,值得收藏
- [转]数据挖掘十大经典算法
- python简单爬取斗图图片(自学第十天)
- 超小型迷你BT客户端-uTorrent(附安装教程)
- 这一年,我所感悟到的
- 狂神JavaWeb课程笔记
- SecureCRT上如何下载文件
- 手机上如何远程控制Linux服务器?
- Xamarin.Android 微信登录回调没有反应问题的解决办法
- vue+antv L7实现高德地图自定义样式和自定义marker
- c基础部分:怎么在for循环中 对上一次循环的值和下一次循环的值作比较
- linux 端口查询命令