在python中的二维数组

时间:2011-11-18 13:28:33

标签: 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")

前两个作业正常。但是当我尝试arr[1].append("bb1")时,我收到以下错误:

IndexError: list index out of range.

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

修改
但我不知道数组中的元素数量(行和列)。

12 个答案:

答案 0 :(得分:60)

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

arr = []
arr.append([])
arr[0].append('aa1')
arr[0].append('aa2')

arr = []
arr.append(['aa1', 'aa2'])

答案 1 :(得分:53)

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

>>> arr = [[]]
>>> len(arr)
1

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

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

arr = [[],[]]

或者定义一个可以使用的较长列表:

>>> arr = [[] for _ in range(5)]
>>> arr
[[], [], [], [], []]

不应该做的是:

arr = [[]] * 3

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

>>> arr[0].append('test')
>>> arr
[['test'], ['test'], ['test']]

答案 2 :(得分:18)

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

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

例如:

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

答案 3 :(得分:3)

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

arr = [[]]

arr[0].append("aa1")
arr[0].append("aa2")
arr.append([])
arr[1].append("bb1")
arr[1].append("bb2")
arr[1].append("bb3")

答案 4 :(得分:2)

在Python中构建多维列表时,我通常使用与ThiefMaster解决方案类似的东西,而不是将项目附加到索引0,然后将项目附加到索引1等,我总是使用index -1,它自动成为数组中最后一项的索引。

arr = []

arr.append([])
arr[-1].append("aa1")
arr[-1].append("aa2")

arr.append([])
arr[-1].append("bb1")
arr[-1].append("bb2")
arr[-1].append("bb3")

将生成您所追求的2D数组(实际上是列表)。

答案 5 :(得分:2)

我们可以动态创建多维数组,如下所示,

创建2个变量以从标准输入读取x和y:

 print("Enter the value of x: ")
 x=int(input())

 print("Enter the value of y: ")
 y=int(input())

创建一个列表数组,其初始值使用以下代码填充0或任何内容

z=[[0 for row in range(0,x)] for col in range(0,y)]

为您的数组数据创建行数和列数。

从标准输入读取数据:

for i in range(x):
         for j in range(y):
             z[i][j]=input()

显示结果:

for i in range(x):
         for j in range(y):
             print(z[i][j],end=' ')
         print("\n")

或使用其他方式显示上面动态创建的数组是

for row in z:
     print(row)

答案 6 :(得分:2)

您可以先将元素追加到初始化的数组中,然后为了方便起见,可以将其转换为numpy数组。

import numpy as np
a = [] # declare null array
a.append(['aa1']) # append elements
a.append(['aa2'])
a.append(['aa3'])
print(a)
a_np = np.asarray(a) # convert to numpy array
print(a_np)

答案 7 :(得分:1)

a = [[] for index in range(1, n)]

答案 8 :(得分:0)

require()

答案 9 :(得分:0)

对于compititve编程

1)输入2D数组中的值

row=input()
main_list=[]
for i in range(0,row):
    temp_list=map(int,raw_input().split(" "))
    main_list.append(temp_list)

2)用于显示2D数组

for i in range(0,row):
    for j in range(0,len(main_list[0]):
        print main_list[i][j],
        print

答案 10 :(得分:0)

上面的方法不适用于for循环,在if条件下,我想将数据从2D数组传输到新数组。这种方法会起作用

a_2d_list = [[1, 2], [3, 4]]
a_2d_list.append([5, 6])
print(a_2d_list)

OUTPUT - [[1, 2], [3, 4], [5, 6]]

答案 11 :(得分:0)

就我而言,我必须这样做:

for index, user in enumerate(users):
    table_body.append([])
    table_body[index].append(user.user.id)
    table_body[index].append(user.user.username)

输出:

[[1, 'john'], [2, 'bill']]