-
2021-05-27 20:21:46
#Python# 二维数组的定义、使用的几种方法
通常的困扰
1、先介绍最简单的一种方式
2、再介绍最常见的一种方式
3、最后介绍最暴力直观的一种方式
通常的困扰
之前对Python里面创建、使用二维数组也很懵,于是也上网查了一些讲解,也发现一些类似的问题,大多数存在着 以为定义正确了二维数组,但修改数据的时候,发现数据经常一起串改。如:b=[[0,0,0]]*3
b[0][1]=1 #这里因为初始[0,0,0]可以这样写数据,如果初始空数组则不能
print(b)
b[1].append(3)
print(b)
1
2
3
4
5
输出:[[0, 1, 0], [0, 1, 0], [0, 1, 0]]
[[0, 1, 0, 3], [0, 1, 0, 3], [0, 1, 0, 3]]因为像这种*3操作,其数据在三个数组里会被一起改掉。
1、先介绍最简单的一种方式
因为Python的数组本身就是动态可变的,同时提供append()函数,该函数不仅可以在一个数组后面添加数字,也可以在后面任意添加数组,如:c = []
c.append([1,2,3,4])
c.append([5,6,7,8])
c.append(9)
print(c)
1
2
3
4
5
最后输出为:
[[1, 2, 3, 4], [5, 6, 7, 8], 9]
该种方法在 已建立 了的数组基础上可以通过c[ i ][ j ]的方式对数据修改和读取:c[0][1]=10
1
输出为:
[[1, 10, 3, 4], [5, 6, 7, 8], 9]2、再介绍最常见的一种方式
b=[[] for i in range(4)]
b[0].append(5)
b[1].append(6)
print(b)
1
2
3
4
最后输出为:
[[5], [6], [ ], [ ]]
该种方法在最大的好处在于通过b[ i ]来存储二维数据,更加直观和清晰。但需先已知数据行数,这里是四行数据。
但一旦对数据没有通过append()方式添加,而是在位置上直接赋值如:b=[[] for i in range(4)]
b[0]=5
b[1].append(6)
print(b)
1
2
3
4
最后输出为:
[5, [6], [ ], [ ]]
看输出就知道对于b[1] 以后就只能是一个数字5,不能再在此位置存储数据。3、最后介绍最暴力直观的一种方式
a=[[[]for i in range(3)]for i in range(4)]
1
最后输出为:
[[[], [], []], [[], [], []], [[], [], []], [[], [], []]]
显然建立了四行三列的矩阵,且每个位置上也是数组的形式,如果比较习惯于通过a[i][j]这样的方式来存储读取数据,这种方式很适合,同时也可以在 未建立 数据(即还没有实际数据)的基础上,也能通过c[ i ][ j ]的方式存储修改数据。弊端是要先知道行列数。如果完全了解上面两种方式的话,这种建立二维数组方式感觉很没必要。a=[[[]for i in range(3)]for i in range(4)]
a[0][0]=1
a[0][1].append(2)
print(a)
1
2
3
4
最后输出为:
[[1, [2], []], [[], [], []], [[], [], []], [[], [], []]]
这里我们就可以看到直接赋值和append()函数的差别。
————————————————
版权声明:本文为CSDN博主「锌录」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_39729672/article/details/90266122更多相关内容 -
Python创建二维数组
2022-04-05 19:20:55文章目录前言实际操作一维数组二维数组总结 前言 Python并没有内置的数组类型,只有tuple,list,dict,set等内置类型。所以只能通过list模拟数组。 实际操作 一维数组 a = [i + 1 for i in range(10)] # a = [1, 2,...前言
Python并没有内置的数组类型,只有
tuple
,list
,dict
,set
等内置类型。所以只能通过list
模拟数组。实际操作
一维数组
a = [i + 1 for i in range(10)] # a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] print('a =', a) b = [3] * 5 # b = [3, 3, 3, 3, 3] print('b =', b)
这里两种实现方式没有区别,后续可以通过下标来访问、修改其中的值。
二维数组
a = [[(row + 1) * (col + 1) for col in range(4)] for row in range(3)] # [[1, 2, 3, 4], [2, 4, 6, 8], [3, 6, 9, 12]] print(a)
这里使用两个列表推导式的方式定义了类型二维数组的效果,后续可以通过下标来访问和修改其中的值,比如:
a[2][1] = 101
。
下面演示一个错误的二维数组的定义方式
a = [[1] * 4] * 3 # [[1, 1, 1, 1], [1, 1, 1, 1], [1, 1, 1, 1]] print(a) a[1][0] = 101 # [[101, 1, 1, 1], [101, 1, 1, 1], [101, 1, 1, 1]] print(a)
这里使用两个
list
的乘法操作进行重复,但是其中的值只是引用拷贝,并不是深拷贝,导致a[1][0] = 101
这个操作也影响了a[0]
和a[2]
。总结
多使用列表推导式😄。
-
python中字符串变二维数组的实例讲解
2020-09-20 16:01:33下面小编就为大家分享一篇python中字符串变二维数组的实例讲解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧 -
Python创建二维数组的正确姿势
2020-12-04 20:33:52本文原创发布于微信公众号「极客猴」,欢迎关注第一时间获取更多原创分享List (列表)是 Python 中最基本的数据结构。在用法上,它有点类似数组,因为每个列表都有一个下标,下标从 0 开始。因此,我们可以使用 list...本文原创发布于微信公众号「极客猴」,欢迎关注第一时间获取更多原创分享
List (列表)是 Python 中最基本的数据结构。在用法上,它有点类似数组,因为每个列表都有一个下标,下标从 0 开始。因此,我们可以使用 list[1] 来获取下标对应的值。如果我们深入下列表的底层原理,会发现列表是基于 PyListObject 实现的。PyListObject 是一个变长对象,所以列表的长度是随着元素多少动态改变的。同时它还支持插入和删除等操作,所以它还是一个可变对象。
可以简单理解为,Python 的列表是长度可变的数组。一般而已,我们用于列表创建都是一维数组。那么问题来,我们如果创建多维数组呢?
01 列表能创建多维数组?
列表是支持操作符,如果一个列表与 ‘ * ’ 号结合使用,能达到重复列表的效果。比如
那么利用这个重复特性,我们是否可以来创建一个二维数组呢?于是乎,我进行一顿猛操作,结果就被我折腾出来了。
看起来很完美的操作,但是如果进行一些列表更新操作,问题就显露出来了。比如我对 list_two 的更换中间位置的值,即对 list_two[1][1] 进行更换值。
不难发现,运行结果有点不对劲,列表中有三个位置的值也改变了。
为什么会出现在这种情况呢?原因是浅拷贝,我们以这种方式创建的列表,list_two 里面的三个列表的内存是指向同一块,不管我们修改哪个列表,其他两个列表也会跟着改变。
如果要使用列表创建一个二维数组,可以使用生成器来辅助实现。
我们对 list_three 进行更新操作,这次就能正常更新了。
除了以上的方式,还有一种更加简洁方便的方式,就是使用 NumPy 模块。
02 相比 List,NumPy 数组的优势
NumPy 全称为 Numerical Python,是 Python 的一个以矩阵为主的用于科学计算的基础软件包。NumPy 和 Pandas、Matpotlib 经常结合一起使用,所以被人们合称为数据分析三剑客。Numpy 中有功能强大的 ndarray 对象,能创建 N 维的数组,另外还提供很多通用函数,支持对数组的元素进行操作、支持对数组进行算法运算以及提供常用的统计函数。
相比 List 对象,NumPy 数组有以下优势:这是因为列表 list 的元素在系统内存中是分散存储的,而 NumPy 数组存储在一个均匀连续的内存块中。这样数组计算遍历所有元素,不像列表 list 还需要对内存地址进行查找,从而节省了计算资源。
Numpy数组能够运用向量化运算来处理整个数组,速度较快;而 Python 的列表则通常需要借助循环语句遍历列表,运行效率相对来说要差。
NumPy 中的矩阵计算可以采用多线程的方式,充分利用多核 CPU 计算资源,大大提升了计算效率。
Numpy 使用了优化过的 C API,运算速度较快。
03 创建数组
前面说到 NumPy 的主要对面是 ndarray 对象,它其实是一系列同类型数据的集合。因为 ndarray 支持创建多维数组,所以就有两个行和列的概念。
创建 ndarray 的第一种方式是利用 array 方式。
其中 shape 是数组的一个属性,表示获取数组大小(有多少行,有多少列),如果是一维数组,则只显示(行,)。代码中打印出 nd_two 的形状,输出为(2,3),表示数组中有 2 行 3 列。
第二种办法则使用 Numpy 的内置函数
1 使用arange 或 linspace 创建连续数组。
虽然 np.arange 和 np.linspace 起到的作用是一样的,都是创建等差数组,但是创建的方式是不同的。
2 使用 zeros(),ones(),full() 创建数组
3 使用 eye() 创建单位矩阵
eye() 创建的数组特点是行数和列数都是一样。因为它创建出来的是单位矩阵,单位矩阵是正形矩阵,对角线的值均为 1,其他位置的值为 0。
4 使用 diag() 创建对角矩阵
diag() 是创建一个 NxN 的对角矩阵,对角矩阵是对角线上的主对角线之外的元素皆为 0 的矩阵。
5 使用 random 创建随机数组
numpy 中的 random 中有很多内置函数,能简单介绍其中的几种。
-
Python输入二维数组方法
2020-11-23 03:06:33Python输入二维数组方法前不久对于Python输入二维数组有些不解,今日成功尝试,记以备忘。这里以输入1-9,3*3矩阵为例n=int(input())line=[[0]*n]*nfor i in range(n):line[i]=input().split(' ')print(line)使用数据...Python输入二维数组方法
前不久对于Python输入二维数组有些不解,今日成功尝试,记以备忘。这里以输入1-9,3*3矩阵为例
n=int(input())
line=[[0]*n]*n
for i in range(n):
line[i]=input().split(' ')
print(line)
使用数据转换为int即可!
以上这篇Python输入二维数组方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。
您可能感兴趣的文章:
一些Python中的二维数组的操作方法
python中字符串变二维数组的实例讲解
基于python 二维数组及画图的实例详解
Python实现二维数组输出为图片
时间: 2018-04-12
需要在程序中使用二维数组,网上找到一种这样的用法: #创建一个宽度为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]] 为什么...一时搞不懂,后面翻阅The Python Standard Library 找到答案 list * n->n sha
1.二维数组取值 注:不管是二维数组,还是一维数组,数组里的数据类型要一模一样,即若是数值型,全为数值型 #二维数组 import numpy as np list1=[[1.73,1.68,1.71,1.89,1.78], [54.4,59.2,63.6,88.4,68.7]] list3=[1.73,1.68,1.71,1.89,1.78] list4=[54.4,59.2,63.6,88.4,68.7] list5=np.array([1.73,1.68,1.71,1.89,1.78])
对于二维数组,img_mask [[ 0 0 0 ..., 7 7 7] [ 0 0 0 ..., 7 7 7] [ 0 0 0 ..., 7 7 7] ..., [266 266 266 ..., 253 253 253] [266 266 266 ..., 253 253 253] [266 266 266 ..., 253 253 253]] 显示为图片的代码为: import matplotlib.pyplot as pyplot pyplot.imshow(im_mask) 以上这篇P
有一道算法题题目的意思是在二维数组里找到一个峰值.要求复杂度为n. 解题思路是找田字(四边和中间横竖两行)中最大值,用分治法递归下一个象限的田字. 在用python定义一个二维数组时可以有list和numpy.array两种方式,看了几篇python中二维数组的建立的博客发现大多都是建立的初始化的二维数组,而我需要通过文件读取得到的是字符串,再把字符串转换为二维数组,找不到解决方法还是决定自己来转换. 首先,最开始的字符串输出如下,数字之间有空格 思路就是把先按换行符进行切片,再对每一行的字符再
关于python中的二维数组,主要有list和numpy.array两种. 好吧,其实还有matrices,但它必须是2维的,而numpy arrays (ndarrays) 可以是多维的. 我们主要讨论list和numpy.array的区别: 我们可以通过以下的代码看出二者的区别 >>import numpy as np >>a=[[1,2,3],[4,5,6],[7,8,9]] >>a [[1,2,3],[4,5,6],[7,8,9]] >>type(a
二维数组 二维数组本质上是以数组作为数组元素的数组,即"数组的数组",类型说明符 数组名[常量表达式][常量表达式].二维数组又称为矩阵,行列数相等的矩阵称为方阵.对称矩阵a[i][j] = a[j][i],对角矩阵:n阶方阵主对角线外都是零元素. Python中创建二维数组 Python中的列表list可以当做一维数组使用,但是没有直接的定义使用二维数组.如果直接使用a = [][]会产生SyntaxError: invalid syntax语法不正确错误. 一般Python中创建二
1.实测,这个版本在32位window7和python3.2环境下正常使用. 2.使用方法:把解压后所得的chardet和docs两个文件夹拷贝到python3.2目录下的Lib\site-packages目录下就可以正常使用了. 3.判断文件编码的参考代码如下: file = open(fileName, "rb")#要有"rb",如果没有这个的话,默认使用gbk读文件. buf = file.read() result = chardet.detect(buf)
如何根据二维数组中的某一行或者某一列排序?假设data是一个numpy.array类型的二维数组,可以利用numpy中的argsort函数进行实现,代码实例如下: data = data[data[:,2].argsort()] #按照第3列对行排序 注意:argsort返回的只是排好序后的行索引,不会改变原数组. 按照某行进行排序,可以利用转置操作,代码如下所示: data = data.T(data.T[:,2].argsort()).T # 按照第3行对列进行排序 也可以直接按行进行排序,
1. 使用输入值初始化列表 nums = [] rows = eval(input("请输入行数:")) columns = eval(input("请输入列数:")) for row in range(rows): nums.append([]) for column in range(columns): num = eval(input("请输入数字:")) nums[row].append(num) print(nums) 输出结果为: 请
以三维数组为例 先申请1个一维数组空间: mat = [None]*d1 d1是第一维的长度. 再把mat中每个元素扩展为第二维的长度: for i in range(len(mat)): mat[i][j] = [None]*d2 类似的,把mat中每个元素扩展为第三维的大小: for i in range(len(mat)): for j in range(len(mat[0]): mat[i][j] = [None]*d3 以上是创建的"数组"其实是list类,不是严格意义的数组
如下所示:
<?php //定义二维索引数组 $arr = array( array("101","李军","男","1976-02-20","95033"), array("103","陆君","男","1974-06-03","95031"), array("10python中字符串数组如何逆序排列?下面给大家介绍几种方法: 1.数组倒序: 原始元素的倒序排列 (1)切片 >>> arr = [1,2,3,4,3,4]>>> print (arr[::-1])[4, 3, 4, 3, 2, 1] (2)reverse() >>> arr = [1,2,3,4,3,4]>>> arr.reverse()>>> print (arr)[4, 3, 4, 3, 2, 1] (3)r
-
python生成一维数组,二维数组
2021-06-22 17:11:543.二维数组 用numpy生成二维数组 写法也是错误的, import numpy as np a3=np.array([[]*5,[]*2]) print(a3) print(shape(a3)) print(type(a3)) #output: [] (2, 0) <class 'numpy.ndarray'> 上面的例子说明,不能... -
python的二维数组操作
2020-12-28 23:11:34需要在程序中使用二维数组,网上找到一种这样的用法: #创建一个宽度为3,高度为4的数组#[[0,0,0],# [0,0,0],# [0,0,0],# [0,0,0]]myList = [[0] * 3] * 4但是当操作myList[0][1] = 1时,发现整个第二列都被赋值,... -
python定义二维数组
2020-11-26 11:22:49我想定义一个没有初始化长度的二维数组,如下所示: matrix = 但它不起作用..... 我已经尝试了下面的代码,但它也是错误的: matrix = 错误: traceback ... indexerror: list index out of range 我哪里有问题?...... -
python如何创建二维数组
2021-12-12 16:50:54关于python中的二维数组,主要有list和numpy.array两种。好吧,其实还有matrices,但它必须是2维的,而numpy arrays (ndarrays) 可以是多维的。 两者可以相互转化。下边是两者区别 数组list >>import numpy... -
python——创建二维数组
2021-12-14 16:41:42方1: 直接list创建 dp = [[1 for i in range(5)] for j in range(4)] print(dp) #其中5代表列数,4代表行数 ...numpy中数组存储在连续的块中,而使用list数组在内存中是分散存储的,numpy无需对内. -
python创建二维数组
2022-05-29 10:43:48二维数组指 x行y列 矩阵 创建方式 m=[[0 for j in range(y)] for i in range (x) ] 对矩阵进行修改举例: m[i][j]=1 重复与列表解析构造矩阵对比: m=[[]]*3 m[0].append(1) m[1].append(2) print(m) ''' ... -
python保存二维数组到txt文件中的方法
2020-11-24 08:56:30python保存二维数组到txt文件中的方法一个非常繁琐粗暴的方法,python属于入门级水平,就酱先备份一下,如果有更好的方法再更新arrs=[[2,15,48,4,5],[6,7,6,4,1],[2,3,6,6,7],[4,6,8,11,2]]ARRS = []f=open('... -
Python numpy实现二维数组和一维数组拼接的方法
2020-11-27 23:50:42Python numpy实现二维数组和一维数组拼接的方法撰写时间:2017.5.23一维数组1.numpy初始化一维数组a = np.array([1,2,3]);print a.shape输出的值应该为(3,)二维数组2.numpy初始化二维数组a = np.array([[1,2,3]])... -
#Python# 二维数组的定义、使用的几种方法
2019-05-16 16:20:36#Python# 二维数组的定义、使用的几种方法通常的困扰1、先介绍最简单的一种方式2、再介绍最常见的一种方式3、最后介绍最暴力直观的一种方式 通常的困扰 之前对Python里面创建、使用二维数组也很懵,于是也上网查了... -
MT9 二维数组打印(Python)
2022-03-11 15:13:22有一个二维数组 (n*n) ,写程序实现从右上角到左下角沿主对角线方向打印。(注:主对角线方向为从左上角指向右下角这一斜线的方向) 给定一个二位数组 arr 及题目中的参数 n ,请返回结果数组。 输入: [[1,2,3,4],[5... -
Python创建二维数组实例(关于list的一个小坑)
2020-11-25 21:36:34创建二维数组的办法•3.1 直接创建法•3.2 列表生成式法•3.3 使用模块numpy创建1.遇到的问题今天写Python代码的时候遇到了一个大坑,差点就耽误我交作业了。。。问题是这样的,我需要创建一个二维数组,如下:m = n... -
python简单创建二维数组
2022-04-14 20:48:28分析数据时经常会用到二维数组,通常需要创建一个元素均为0的数组。 一种常为采用的方法: Matri = [[0 for i in range(col)] for j in range(row)] 行数:row 列数:col row = 4 col = 3 Matrix = [[0 for i ... -
Python二维数组实现求出3*3矩阵对角线元素的和示例
2021-01-02 23:01:02程序分析:利用双重for循环控制输入二维数组,再将a[i][i]累加后输出。 def two_dimensionalArray(self): '二维数组实现求三阶矩阵的对角线元素之和' sum = 0 matrix = [[0, 1, 0], [0, 21, 0], [0, 12, 0]] ... -
Python实现二维数组输出为图片
2020-11-23 19:33:58Python实现二维数组输出为图片 对于二维数组,img_mask[[ 0 0 0 ..., 7 7 7][ 0 0 0 ..., 7 7 7][ 0 0 0 ..., 7 7 7]...,[266 266 266 ..., 253 253 253][266 266 266 ..., 253 253 253][266 266 266 ..., 253 253 ... -
Python创建二维数组(关于list的一个小坑)
2021-04-26 19:02:10原标题:Python创建二维数组(关于list的一个小坑) 1.遇到的问题今天写Python代码的时候遇到了一个大坑,问题是这样的,我需要创建一个二维数组,如下: 输出结果如下: 是不是看起来没有一点问题?一开始我也是这么... -
python3创建二维数组
2021-07-01 23:19:57python3创建二维数组关于python3创建二维数组的问题总结 关于python3创建二维数组的问题 做题时遇到创建数组时遇到一个小问题,如下: grid=[ ["1","1","1","1","0"], ["1","1","0","1","0"], ["1","1","0","0","0"]... -
如何在Python中定义二维数组
2020-12-10 14:04:25矩阵运算numpy通常使用二维数组类型。创建新数组的方法有很多;最有用的方法之一是zeros函数,它接受一个形状参数并返回给定形状的数组,其值初始化为零:>>>importnumpy>>>numpy.zeros((5,5))... -
Python二维数组创建
2018-07-12 01:22:25Python二维数组创建 创建方法: 1. 直接创建 2. 列表生成 3. numpy创建 遇到的问题: a = [[]]*3 a[0].append(1) a[1].append(2) a[2].append(3) print(a) 输出为: [[1, 2, 3], [1, 2, 3], [1, 2, 3]... -
python:创建二维数组的正确方式
2022-03-06 09:14:52如下方式创建二维数组: ns = [[0] * 3] * 3 print("ns =", ns) ns[0][0] = 233 print("ns =", ns) 输出: ns = [[0, 0, 0], [0, 0, 0], [0, 0, 0]] ns = [[233, 0, 0], [233, 0, 0], [233, 0, 0]] 原因: ... -
python建立二维数组问题
2017-04-18 09:55:55在python中定义二维数组 发表于 http://liamchzh.0fees.net/?p=234&i=1 一次偶然的机会,发现python中list非常有意思。 先看一段代码 [py] array = [0, 0, 0] matrix = [array*3] print matrix ## [[0,... -
Python二维数组的创建
2016-08-16 11:09:25如果在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... -
Python中创建二维数组
2020-11-30 11:14:26Python中创建二维数组二维数组二维数组本质上是以数组作为数组元素的数组,即“数组的数组”,类型说明符 数组名[常量表达式][常量表达式]。二维数组又称为矩阵,行列数相等的矩阵称为方阵。对称矩阵a[i][j] = a[j]...