python中的二维数组

python中的二维数组,python,multidimensional-array,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. 我在试图声明二维数组时做了什么傻事吗 编辑: 但我不

我想知道如何用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.
我在试图声明二维数组时做了什么傻事吗

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

在python中不“声明”数组或任何其他内容。您只需指定一个(新)变量。如果需要多维数组,只需添加一个新数组作为数组元素

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


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']]

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

arr = [[]]

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

这里使用的不是数组,而是列表

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

例如:

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

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

i、 e


将生成您要查找的二维数组(实际上是列表列表)。

我们可以按如下方式动态创建多维数组

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

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

 print("Enter the value of y: ")
 y=int(input())
for i in range(x):
         for j in range(y):
             z[i][j]=input()
使用以下代码创建初始值为0或任何内容的列表数组

z=[[0 for row in range(0,x)] for col in range(0,y)]
为数组数据创建行数和列数

从标准输入读取数据:

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

 print("Enter the value of y: ")
 y=int(input())
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)

用于compititve编程

1) 用于在二维数组中输入值

row=input()
main_list=[]
for i in range(0,row):
    temp_list=map(int,raw_input().split(" "))
    main_list.append(temp_list)
2) 用于显示二维阵列

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

您可以先将元素附加到初始化的数组中,然后为了方便起见,可以将其转换为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)

对于for循环,上面的方法不适用,因为我希望在if条件下将数据从二维数组传输到新数组。这种方法行得通

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

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

在我的情况下,我必须这样做:

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']]

这不应该是
arr.append(…)
而不是
arr[0]=…
,以避免
索引器:列表分配索引超出范围
?列表理解中的下划线有什么作用?@root45我们需要在列表理解中使用一个变量,以便将i的
arr=[]放入范围(5)]
但是有一个惯例,即命名一个永远不会用作
的变量。尽管在交互式Python REPL中,
\uuu
变量存储最后一个表达式的结果。omg这[]*3是导致我的hackerrank代码中所有这些问题的原因。我已经用Py编写代码4年了,但我似乎还有很多东西要学!请不要在答案中只写代码。。。解释它是如何解决问题的。
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']]