如何定义一个二维数组?

895

我想像这样定义一个没有初始化长度的二维数组:

Matrix = [][]

但是这样会出现错误:

IndexError: 列表索引超出范围


18
我们不能定义数组或其他东西,但可以像这里的答案所示创建多维序列。请记住,在Python中,变量是无类型的,而值是强类型的。 - SingleNegationElimination
2
我有些困惑,从其他编程语言的角度来看:一个包含1D-Array的1D-Array和一个2D-Array之间是有区别的。据我所知,在Python中没有多维数组(或列表)这种数据类型。这一点需要说明一下... - Dirk Reichel
4
请参考Python3 FAQ中关于“如何创建多维列表”的内容。链接:https://docs.python.org/3/faq/programming.html#faq-multidimensional-list - Kevin W Matthews
31个回答

6
l=[[0]*(L) for _ in range(W)]

将会比以下更快:

l = [[0 for x in range(L)] for y in range(W)] 

3
下面是翻译的结果:已经在下面回答了相同的答案。另外,[[0]*(L) for i in range(W)] 应该改为 [[0]*(L) for _ in range(W)],因为 i 没有在任何地方被使用。 - Ayush Vatsyayan

5
如果您在开始之前没有尺寸信息,则创建两个一维列表。
list 1: To store rows
list 2: Actual two-dimensional matrix

将整行存储在第一个列表中。完成后,将列表1附加到列表2中:

from random import randint

coordinates=[]
temp=[]
points=int(raw_input("Enter No Of Coordinates >"))
for i in range(0,points):
    randomx=randint(0,1000)
    randomy=randint(0,1000)
    temp=[]
    temp.append(randomx)
    temp.append(randomy)
    coordinates.append(temp)

print coordinates

输出:

Enter No Of Coordinates >4
[[522, 96], [378, 276], [349, 741], [238, 439]]

4
通过使用列表:
matrix_in_python  = [['Roy',80,75,85,90,95],['John',75,80,75,85,100],['Dave',80,80,80,90,95]]

通过使用字典: 你也可以将这些信息存储在哈希表中,以便快速搜索,如:

matrix = { '1':[0,0] , '2':[0,1],'3':[0,2],'4' : [1,0],'5':[1,1],'6':[1,2],'7':[2,0],'8':[2,1],'9':[2,2]};

matrix['1']将在O(1)时间内给出结果。

*注意: 您需要处理哈希表中的冲突。


2
# Creates a list containing 5 lists initialized to 0
Matrix = [[0]*5]*5

注意这个简短的表达式,在 @F.J 的回答中有完整解释。


21
请注意,因为Matrix[0],Matrix[1],...,Matrix[4]都指向同一个数组,所以在执行Matrix[0][0] = 3之后,您会发现Matrix[0][0] == Matrix[1][0] == ... == Matrix[4][0] == 3 - gongzhitaao
1
感谢gongzhitaao的评论。如果我早读到它,至少可以节省我半个小时的时间。 拥有一个矩阵,其中每行都指向内存中的相同位置,似乎并不是很有用,如果您不知道自己在做什么,甚至可能是危险的!我非常确定这不是提问者Masoud Abasian想要做的。 - Adrian
7
你应该删除这个回答,因为它不是正确的答案。初学者可能会感到困惑。 - cxxl
2
你指的是哪个答案?我没有看到使用者名为“F.J”(即使在已删除的答案中也没有)。 - Peter Mortensen
@PeterMortensen 我认为现在已经被删除了。最好看一下答案(由Andrew Clark在上面):https://dev59.com/GWw15IYBdhLWcg3wWqf-#6667529。 - jiten
正如前面所提到的,这是不正确的,可能会导致难以发现的微妙错误。 - kohlerm

2
通常情况下,首选的模块是NumPy:
import numpy as np
   
# Generate a random matrix of floats
np.random.rand(cols,rows)

# Generate a random matrix of integers
np.random.randint(1, 10, size=(cols,rows))

2

这里是创建Python矩阵的代码片段:

# get the input rows and cols
rows = int(input("rows : "))
cols = int(input("Cols : "))

# initialize the list
l=[[0]*cols for i in range(rows)]

# fill some random values in it
for i in range(0,rows):
    for j in range(0,cols):
        l[i][j] = i+j

# print the list
for i in range(0,rows):
    print()
    for j in range(0,cols):
        print(l[i][j],end=" ")

请建议我是否遗漏了什么。


1
用户定义函数以输入矩阵并打印。
def inmatrix(m,n):
    #Start function and pass row and column as parameter
    a=[] #create a blank matrix
    for i in range(m): #Row input
        b=[]#blank list
        for j in range(n): # column input
            elm=int(input("Enter number in Pocket ["+str(i)+"]["+str(j)+"] ")) #Show Row And column  number 
            b.append(elm) #add value to b list
        a.append(b)# Add list to matrix
    return  a #return Matrix 

def Matrix(a): #function for print Matrix
    for i in range(len(a)): #row
        for j in range(len(a[0])): #column
            print(a[i][j],end=" ") #print value with space
        print()#print a line After a row print

m=int(input("Enter number of row")) #input row
n=int(input("Enter number of column"))
a=inmatrix(m,n) #call input matrix function 

print("Matrix is ... ")

Matrix(a) #print matrix function

1

试试这个:

rows = int(input('Enter rows\n'))
my_list = []
for i in range(rows):
    my_list.append(list(map(int, input().split())))

1
如果您需要一个预定义数字的矩阵,可以使用以下代码:
def matrix(rows, cols, start=0):
    return [[c + start + r * cols for c in range(cols)] for r in range(rows)]


assert matrix(2, 3, 1) == [[1, 2, 3], [4, 5, 6]]

0
我对Python非常陌生,但我最终的做法是创建一个空的一维数组。
ar1 = []

要使用循环来填充它,你需要在循环内部创建一个新的临时数组,然后将临时数组追加到原始数组中。
for i in list:
   temp = (i,1)
   ar1.append(temp)

要查看不同的元素,你只需要正确地引用它们。下面是第一行中的第二个元素。(基于零的数组)
ar1[0][1]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接