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

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

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

扫描二维码关注公众号,回复: 10509507 查看本文章
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[ : ]

发布了35 篇原创文章 · 获赞 14 · 访问量 6842

猜你喜欢

转载自blog.csdn.net/caoyuan666/article/details/105239876