2012-05-23 12 views

Respuesta

72

De esta manera:

numrows = len(input) # 3 rows in your example 
numcols = len(input[0]) # 2 columns in your example 

Suponiendo que todos los sub-listas tienen la misma longitud (es decir, que no es una matriz escalonada).

+2

Siempre que no sea una matriz dentada, esto es ideal. – Makoto

+2

@Makoto Eso es correcto. Añadí esa suposición a mi respuesta. –

+0

yo, quiero encontrar la suma de todos los elementos en esa matriz 2D def sum1 (entrada): suma = 0 para fila en rango (len (input) -1): para col in range (len [input [0 ]) - 1): suma = suma + de entrada [fila] [col] suma retorno sum1 de impresión ([[1, 2], [3, 4], [5, 6]]) Muestra 4 en lugar de 21 (1 + 2 + 3 + 4 + 5 + 6 = 21). ¿Dónde está mi error? –

20

Puede usar numpy.shape.

import numpy as np 
x = np.array([[1, 2],[3, 4],[5, 6]]) 

Resultado:

>>> x 
array([[1, 2], 
     [3, 4], 
     [5, 6]]) 
>>> np.shape(x) 
(3, 2) 

primer valor de la tupla es el número filas = 3; segundo valor en la tupla es el número de columnas = 2.

+0

Gracias, no quería usar numpy para esta cosa – urgeo

8

Suponiendo entrada [fila] [col],

rows = len(input) 
    cols = map(len, input) #list of column lengths 
10

Además, forma correcta de contar el número total de la pieza sería:

sum(len(x) for x in input) 
+0

¡Genial, esto era exactamente lo que necesitaba! En mi caso, puedo contar todos los elementos de una lista hasta el 2. ° grado: sum (len (x) if isinstance (x, list) else 1 para x en some_list) – Inaki