2011-11-18 38 views
28

Quiero saber cómo declarar una matriz bidimensional en Python.matriz bidimensional en python

arr = [[]] 

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

Las dos primeras asignaciones funcionan bien. Pero cuando intento hacerlo, arr [1] .append ("bb1"), aparece el siguiente error,

IndexError: lista el índice fuera de rango.

estoy haciendo nada tonto al tratar de declarar la matriz 2-D

[editar]: pero no saben el no. de elementos en la matriz (tanto filas como columnas).

Respuesta

48

No "declaras" matrices ni nada en python. Simplemente asigne a una (nueva) variable. Si desea una matriz multidimensional, simplemente agregue una nueva matriz como un elemento de matriz.

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

o

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

No debería ser 'arr.append (...)' en lugar de 'arr [0] = ...', para evitar 'IndexError: index de la lista de asignaciones fuera de rango'? – Bruno

+1

sí, lo arregló. – ThiefMaster

48

No hay matrices multidimensionales como tales en Python, lo que tienes es una lista que contiene otras listas.

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

Lo que ha hecho es declarar una lista que contiene una lista única. Por lo tanto, arr[0] contiene una lista, pero arr[1] no está definido.

Puede definir una lista que contiene dos listas de la siguiente manera:

arr = [[],[]] 

o para definir una lista más larga que podría utilizar:

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

Lo que no debe hacer es lo siguiente:

arr = [[]] * 3 

Como esto pone de la misma lista en los tres lugares en la lista de contenedores:

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

¿Qué hace el guión bajo en la lista de comprensión? –

+1

@ root45 Necesitamos una variable en la lista de comprensión, así que podríamos poner 'arr = [[] para i en el rango (5)]' pero existe una convención para nombrar una variable que nunca vas a usar como '_' . Aunque en el REPL interactivo de Python, la variable '_' almacena el resultado de la última expresión. –

3

intenta anexar al segundo elemento en la matriz, pero no existe. Crearlo.

arr = [[]] 

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

Lo que está utilizando aquí no son matrices, sino listas (de listas).

Si quiere matrices multidimensionales en Python, puede usar las matrices Numpy. Necesitarías saber la forma de antemano.

Por ejemplo:

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

Al construir listas multidimensionales en Python que suelo usar algo similar a la solución de ThiefMaster, pero en lugar de anexar artículos para indexar 0, a continuación, añadiendo elementos al índice 1, etc.Siempre uso el índice -1 que es automáticamente el índice del último elemento de la matriz.

decir

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") 

producirá el 2D-array (en realidad una lista de listas) que está buscando.

2

Podemos crear matriz multidimensional dinámicamente como sigue,

Crear 2 variables para leer x e y de la entrada estándar:

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

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

crear una matriz de lista con valores iniciales llenos de 0 o nada utilizando el siguiente código

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

crea el número de filas y columnas para los datos de su matriz.

datos leídos de la entrada estándar:

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

visualizar el resultado:

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

o utilice otra manera de exhibir array anteriormente creado dinámicamente es,

for row in z: 
    print(row) 
0
x=3#rows 
y=3#columns 
a=[]#create an empty list first 
for i in range(x): 
    a.append([0]*y)#And again append empty lists to original list 
    for j in range(y): 
     a[i][j]=input("Enter the value") 
0

Para la programación compititve

1) Para introducir el valor en una matriz 2D-

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

2) Para la visualización de matriz 2D

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