在python中的二维数组

Syn*_*ter 38 python multidimensional-array

我想知道如何在Python中声明二维数组.

arr = [[]]

arr[0].append("aa1")
arr[0].append("aa2")
arr[1].append("bb1")
arr[1].append("bb2")
arr[1].append("bb3")
Run Code Online (Sandbox Code Playgroud)

前两个任务工作正常.但是当我尝试这样做时arr[1].append("bb1"),我收到以下错误:

IndexError: list index out of range.
Run Code Online (Sandbox Code Playgroud)

我在尝试宣布2-D阵列时做了什么傻事?

编辑:
但我不知道数组中的元素数量(行和列).

Thi*_*ter 67

你没有在Python中"声明"数组或其他任何东西.您只需分配一个(新)变量.如果需要多维数组,只需添加一个新数组作为数组元素.

arr = []
arr.append([])
arr[0].append('aa1')
arr[0].append('aa2')
Run Code Online (Sandbox Code Playgroud)

要么

arr = []
arr.append(['aa1', 'aa2'])
Run Code Online (Sandbox Code Playgroud)

  • 这不应该是`arr.append(...)`而不是`arr [0] = ...`,以避免`IndexError:列表赋值索引超出范围`? (5认同)

Dav*_*ebb 56

在Python中没有多维数组,你拥有的是包含其他列表的列表.

>>> arr = [[]]
>>> len(arr)
1
Run Code Online (Sandbox Code Playgroud)

您所做的是声明包含单个列表的列表.因此arr[0]包含列表但arr[1]未定义.

您可以定义包含两个列表的列表,如下所示:

arr = [[],[]]
Run Code Online (Sandbox Code Playgroud)

或者,您可以定义更长的列表:

>>> arr = [[] for _ in range(5)]
>>> arr
[[], [], [], [], []]
Run Code Online (Sandbox Code Playgroud)

不应该做的是:

arr = [[]] * 3
Run Code Online (Sandbox Code Playgroud)

因为这会在容器列表的所有三个位置放置相同的列表:

>>> arr[0].append('test')
>>> arr
[['test'], ['test'], ['test']]
Run Code Online (Sandbox Code Playgroud)

  • 列表推导式中的下划线有什么作用? (2认同)
  • @ root45我们需要列表推导中的一个变量,所以我们可以在范围(5)中放置`arr = [[] for i`,但是有一个约定来命名一个你永远不会用作`_`的变量.虽然在交互式Python REPL中,`_`变量存储了最后一个表达式的结果. (2认同)

Bru*_*uno 19

你在这里使用的不是数组,而是列表(列表).

如果您想在Python中使用多维数组,则可以使用Numpy数组.你需要提前知道形状.

例如:

 import numpy as np
 arr = np.empty((3, 2), dtype=object)
 arr[0, 1] = 'abc'
Run Code Online (Sandbox Code Playgroud)


ton*_*ony 5

您尝试附加到数组中的第二个元素,但它不存在。创造它。

arr = [[]]

arr[0].append("aa1")
arr[0].append("aa2")
arr.append([])
arr[1].append("bb1")
arr[1].append("bb2")
arr[1].append("bb3")
Run Code Online (Sandbox Code Playgroud)