领先的免费Web技术教程,涵盖HTML到ASP.NET

网站首页 > 知识剖析 正文

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

nixiaole 2025-02-11 13:03:40 知识剖析 18 ℃

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

相似点:

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

区别:

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

联系:

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

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

import numpy as np

# 创建一个3x3的二维数组
a = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])

# 使用多维索引访问元素
print(a[0, 0])  # 1
print(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])  # 1
print(b[1:4])  # [2, 3, 4]
  1. 视图和副本

对于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] = 10
print(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] = 10
print(c)  # [1, 2, 3, 4, 5, 6]

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

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

Tags:

最近发表
标签列表