轻松搞懂python列表list 和numpy.array数组的区别

您所在的位置:网站首页 Python中的列表和C中数组有何异同 轻松搞懂python列表list 和numpy.array数组的区别

轻松搞懂python列表list 和numpy.array数组的区别

2023-11-13 22:16| 来源: 网络整理| 查看: 265

文章目录 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一维数组、列表访问

在这里插入图片描述 列表索引

x = [0,1,2,3,4,5,6,7,8,9] print(x[5]) print(x[1:3]) print(x[5:]) print(x[-1]) print(x[1:-1:2]) print(x[::-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 = [[1,2,3],[4,5,6]] print(x[1:2]) print(x[1:2][0]) print(x[1]) print(x[0][0])

数组:

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