【python】list的append和extend vs numpy的append方法

1.list的extend和append方法

在Python中,list 类型有两个常用的方法,即 extendappend,它们用于向列表中添加元素,但有一些重要的区别。

  1. append 方法:

    • append 方法用于将一个元素添加到列表的末尾。
    • 如果你向列表追加一个序列(例如另一个列表),整个序列将被视为单个元素添加到列表的末尾。
    • append 操作是就地修改列表,没有返回值。
    my_list = [1, 2, 3]
    my_list.append(4)
    print(my_list)  # 输出: [1, 2, 3, 4]
    
    another_list = [5, 6]
    my_list.append(another_list)
    print(my_list)  # 输出: [1, 2, 3, 4, [5, 6]]
    
  2. extend 方法:

    • extend 方法用于将一个可迭代对象的元素逐一添加到列表的末尾。
    • 这个方法可以用来合并两个列表。
    • append 不同,extend 将可迭代对象中的元素逐一添加到列表,而不是将整个对象作为一个单独的元素添加。
    my_list = [1, 2, 3]
    another_list = [4, 5, 6]
    my_list.extend(another_list)
    print(my_list)  # 输出: [1, 2, 3, 4, 5, 6]
    

总结:

  • 使用 append 时,你添加的是一个单一的元素,而 extend 允许你添加多个元素。
  • append 是在列表的末尾添加元素,而 extend 是将多个元素逐一追加到列表的末尾。

2.numpy 的append方法

**(1)**在NumPy中,numpy.append 函数用于将值附加到数组的末尾。与Python的list对象的append方法相似,但有一些细微的区别。

以下是 numpy.append 的基本用法:

import numpy as np

# 创建一个numpy数组
arr = np.array([1, 2, 3])

# 使用numpy.append将值附加到数组的末尾
new_arr = np.append(arr, 4)

print("Original Array:", arr)
print("New Array:", new_arr)

输出:

Array: [1 2 3]
New Array: [1 2 3 4]

请注意,numpy.append 不会修改原始数组,而是返回一个新的数组,该数组包含原始数组的副本和附加的值。

另外,numpy.append 还可以用于在指定轴上连接两个数组:

import numpy as np

# 创建两个numpy数组
arr1 = np.array([[1, 2, 3], [4, 5, 6]])
arr2 = np.array([[7, 8, 9]])

# 在指定轴上连接两个数组
new_arr = np.append(arr1, arr2, axis=0)

print("Original Array 1:")
print(arr1)
print("Original Array 2:")
print(arr2)
print("New Array:")
print(new_arr)

输出:

Array 1:
[[1 2 3]
 [4 5 6]]
Original Array 2:
[[7 8 9]]
New Array:
[[1 2 3]
 [4 5 6]
 [7 8 9]]

在这个例子中,axis=0 表示沿着行的方向进行连接。

**(2)**ps:如果没有指定 axis 参数,默认情况下 numpy.append 将会展平数组并返回一个包含所有元素的一维数组。这意味着数组将被按照 C-style 顺序(按行)展平,然后在末尾添加新值。

以下是一个没有指定 axis 参数的例子:

import numpy as np

# 创建一个二维numpy数组
arr = np.array([[1, 2, 3], [4, 5, 6]])

# 使用numpy.append在默认情况下连接一个新的一维数组
new_arr = np.append(arr, [7, 8, 9])

print("Original Array:")
print(arr)
print("New Array:")
print(new_arr)

输出:

Original Array:
[[1 2 3]
 [4 5 6]]
New Array:
[1 2 3 4 5 6 7 8 9]

在这个例子中,arr 是一个二维数组,而 numpy.append 在没有指定 axis 参数的情况下,默认按行展平了数组,并将新数组附加到了末尾。

**(3)**当 numpy.append 函数的 axis 参数设置为 1 时,表示在水平方向上连接(按列连接)数组。这意味着它将会沿着数组的第二个轴(轴的索引从0开始)连接数组。

以下是一个使用 axis=1 的示例:

import numpy as np

# 创建两个二维numpy数组
arr1 = np.array([[1, 2, 3], [4, 5, 6]])
arr2 = np.array([[7, 8], [9, 10]])

# 在水平方向上连接两个数组
new_arr = np.append(arr1, arr2, axis=1)

print("Original Array 1:")
print(arr1)
print("Original Array 2:")
print(arr2)
print("New Array:")
print(new_arr)

输出:

Original Array 1:
[[1 2 3]
 [4 5 6]]
Original Array 2:
[[ 7  8]
 [ 9 10]]
New Array:
[[ 1  2  3  7  8]
 [ 4  5  6  9 10]]

在这个例子中,arr1arr2 在水平方向上连接起来,形成一个新的数组 new_arraxis=1 表示连接发生在列的方向上。

总结一下:

  • axis=0 表示在垂直方向上连接(按行连接)数组。
  • axis=1 表示在水平方向上连接(按列连接)数组。

**(4)**如果在使用 numpy.append 时遇到问题,可能是由于数据的维度不匹配或者使用方式不正确导致的。

  1. 数据类型不匹配: numpy.append 要求待附加的值具有与原始数组相同的数据类型。如果数据类型不匹配,可能会引发错误。

    import numpy as np
    
    arr = np.array([1, 2, 3])
    new_value = '4'  # 数据类型不匹配,字符串与整数
    new_arr = np.append(arr, new_value)  # 可能引发错误
    
  2. 维度不匹配: 如果你在没有指定 axis 参数的情况下附加数组,确保它们的维度是兼容的。

    import numpy as np
    
    arr = np.array([[1, 2, 3], [4, 5, 6]])
    new_value = [7, 8, 9, 10]  # 维度不匹配
    new_arr = np.append(arr, new_value)  # 可能引发错误
    
  3. 未保存返回值: numpy.append 返回一个新的数组,如果你没有将其保存到变量中,可能会导致数据丢失。

    import numpy as np
    
    arr = np.array([1, 2, 3])
    new_value = 4
    np.append(arr, new_value)  # 没有保存返回值,新的数组丢失
    

你可能感兴趣的:(python,list,numpy)