龙空技术网

python NumPy数组与列表的的索引和切片的区别与联系

AI侃科技之备课汗姆 167

前言:

此刻同学们对“python 索引数组”大概比较注重,各位老铁们都想要了解一些“python 索引数组”的相关内容。那么小编同时在网摘上收集了一些对于“python 索引数组””的相关文章,希望同学们能喜欢,大家一起来学习一下吧!

NumPy数组和Python列表都可以使用索引和切片操作来访问它们的元素。但是,它们的索引和切片操作略有不同,下面是它们的区别和联系:

相似点:

索引和切片都用于访问数组或列表中的元素或子序列。索引和切片都使用整数下标。

区别:

列表只能使用整数下标访问元素,而NumPy数组可以使用多维下标访问元素。列表切片产生的是一个新的列表对象,而NumPy数组切片产生的是一个视图(即原始数组的一个子数组)。列表切片不支持多维切片,而NumPy数组支持多维切片。NumPy数组的花式索引和布尔索引可以根据条件或位置来访问元素,而列表不支持这种高级索引方式。

联系:

列表和NumPy数组都支持负数下标和步长操作。列表和NumPy数组都支持基本的切片操作,如[start:stop:step]。列表和NumPy数组都支持使用[:]对整个列表或数组进行复制操作。多维索引和切片

对于多维数组,NumPy可以使用多维索引和切片来访问和操作数组中的元素,而列表则只支持一维索引和切片。

import numpy as np# 创建一个3x3的二维数组a = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])# 使用多维索引访问元素print(a[0, 0])  # 1print(a[1, 1])  # 5# 使用多维切片访问子数组print(a[:2, :2])# [[1 2]#  [4 5]]# 列表只支持一维索引和切片b = [1, 2, 3, 4, 5, 6, 7, 8, 9]print(b[0])  # 1print(b[1:4])  # [2, 3, 4]
视图和副本

对于NumPy数组的切片操作,会产生一个视图,即原始数组的一个子数组。而对于列表的切片操作,则会产生一个新的列表对象。

import numpy as np# 创建一个3x3的二维数组a = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])# 对数组进行切片操作,产生一个视图b = a[:2, :2]print(b)# [[1 2]#  [4 5]]# 修改视图中的元素,同时也会修改原始数组b[0, 0] = 10print(a)# [[10  2  3]#  [ 4  5  6]#  [ 7  8  9]]# 对列表进行切片操作,产生一个新的列表对象c = [1, 2, 3, 4, 5, 6]d = c[1:4]print(d)  # [2, 3, 4]# 修改新的列表对象中的元素,不会影响原始列表d[0] = 10print(c)  # [1, 2, 3, 4, 5, 6]

从上面的例子可以看出,NumPy数组的切片操作会修改原始数组中的元素,而列表的切片操作不会影响原始列表中的元素。

总的来说,NumPy数组和列表的索引和切片操作有一些相似之处,但也有一些明显的区别,特别是在多维数组的处理和切片的视图和副本的处理上,NumPy的表现更为出色。

标签: #python 索引数组