轻松搞懂python列表list 和numpy.array数组的区别 |
您所在的位置:网站首页 › Python中的列表和C中数组有何异同 › 轻松搞懂python列表list 和numpy.array数组的区别 |
文章目录
1、列表2、数组(array)3、程序举例3.1 创建3.2 元素访问3.2.1一维数组、列表访问3.2.2 二维数组、列表访问
3.3 浅拷贝与深拷贝
1、列表
list是处理一组有序项目的数据结构,即你可以在一个列表中存储一个序列的项目。列表中的项目。列表中的项目应该包括在方括号中,这样python就知道你是在指明一个列表。一旦你创建了一个列表,你就可以添加,删除,或者是搜索列表中的项目。由于你可以增加或删除项目,我们说列表是可变的数据类型,即这种类型是可以被改变的,并且列表是可以嵌套的。 列表是可以改变的,能够增加或减少,(append和del函数) 2、数组(array)Numpy是专门针对数组的操作和运算进行了设计,所以数组的存储效率和输入输出性能远优于Python中的嵌套列表,数组越大,Numpy的优势就越明显。通常Numpy数组中的所有元素的类型都是相同的,而Python列表中的元素类型是任意的,所以在通用性能方面Numpy数组不及Python列表,但在科学计算中,可以省掉很多循环语句,代码使用方面比Python列表简单的多。 在list中的数据类型保存的是数据的存放的地址,简单的说就是指针,并非数据,这样保存一个list就太麻烦了,例如list1=[1,2,3,‘a’]需要4个指针和四个数据,增加了存储和消耗cpu。 numpy中封装的array有很强大的功能,里面存放的都是相同的数据类型 3、程序举例 3.1 创建列表list的创建: x = list() x.append(1) x.extend([2,3,4]) print(x) x = [1,2,3,4,5] print(x)这里需要注意append和extend的区别,append将所有内容当做一个元素加入到列表的后面。 numpy数组创建: import numpy as np #常规创建 a=np.array((1,2,3))#参数是tuple b=np.array([6,7,8])#参数是list c=np.array([[1,2,3],[4,5,6]])#参数是二维list #其他方法创建 arr1=np.arange(1,10,1) arr2=np.linspace(1,10,10) np.arange(a,b,c)表示产生从a-b不包括b,间隔为c的一个array,数据类型默认是int32。linspace(a,b,c)表示的是把a-b平均分成c分,它包括b 3.2 元素访问 3.2.1一维数组、列表访问
numpy数组的访问 x = [0,1,2,3,4,5,6,7,8,9] x = np.array(x) print(x[5]) print(x[1:3]) print(x[5:]) print(x[-1]) print(x[1:-1:2]) print(x[::-1]) 3.2.2 二维数组、列表访问对于二维数组arr=np.array([[1,2,3],[4,5,6]])举例 数组: x=np.array([[1,2,3],[4,5,6]]) print(x[1:2]) print(x[1:2][0]) print(x[1]) print(x[0][0]) print(x[0,0])区别:在列表list中,不能使用x[0,0,]来访问第1行第一列的元素,只能使用x[0,0]。 3.3 浅拷贝与深拷贝numpy数组: array的索引最终产生的是一个「 原始数据的浅拷贝」,他和原始数据共用一块内存。当我们修改了b的第一个元素的时候,a的第一个元素也被修改了。因为他们都是指向的同一个内存。 这是因为当我们执行b=a[:2]等语句的时候,拷贝的是指向这个元素的指针,当我们想要修改的时候,也是修改了指针指向的元素值。 import numpy as np a=np.array([0,1,2,3]) b=a[:2] a[0] = 100 print(a) print(b)结果: [100 1 2 3] [100 1]list列表: list对象在执行的时候拷贝了数据与指针,就不会有这种状况啦。 a=[0,1,2,3] b=a[:2] a[0] = 100 print(a) print(b)结果: [100, 1, 2, 3] [0, 1]但是,对于列表,如果直接使用b = a,同样是浅拷贝,可以使用b = a[ : ] |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |