2011-06-17 28 views
8

Tengo una lista de listas, cada una con un número diferente de cadenas. Me gustaría (de manera eficiente) convertir todo esto en Ints, pero me siento un poco denso, ya que no puedo hacerlo funcionar por mi vida. Lo he estado intentando: newVals = [int (x) para x en [fila para filas en valores]]Python: One-liner para realizar una operación sobre elementos en una matriz 2d (lista de listas)?

Donde 'values' es la lista de listas. Sigue diciendo que x es una lista y, por lo tanto, no puede ser el argumento si int(). Obviamente estoy haciendo algo estúpido aquí, ¿qué es? ¿Hay un lenguaje aceptado para este tipo de cosas?

Como siempre, muchas gracias por adelantado.

Respuesta

6

Esto deja a los enteros anidados

[map(int, x) for x in values] 

Si usted quiere que aplanadas, eso no es difícil tampoco

para python3 map() devuelve un iterador. Se podría utilizar

[list(map(int, x)) for x in values] 

pero usted puede preferir utilizar los anidados de LC en ese caso

[[int(y) for y in x] for x in values] 
+0

No trabaje en Python 3 como 'map' devuelve un iterador – JBernardo

8

¿Qué tal:

>>> a = [['1','2','3'],['4','5','6'],['7','8','9']] 
>>> [[int(j) for j in i] for i in a] 
[[1, 2, 3], [4, 5, 6], [7, 8, 9]] 
1

Sólo tiene que utilizar el orden incorrecto y entre paréntesis - debe ser:

inputVals = [['1','2','3'], ['3','3','2','2']] 
[int(x) for row in inputVals for x in row] 

O si lo necesita lista de la lista en la salida a continuación:

map(lambda row: map(int, row), inputVals) 
0

una manera fea es utilizar evalf:

>>> eval(str(a).replace("'","")) 
[[1, 2, 3], [4, 5, 6], [7, 8, 9]] 

si no te importa todos sus números en una matriz que podría ir:

>>> a = [['1','2','3'],['4','5','6'],['7','8','9']] 
>>> map(int,sum(a,[])) 
[1, 2, 3, 4, 5, 6, 7, 8, 9] 
Cuestiones relacionadas