Tengo una lista de listas, cada una con un número diferente de cadenas. Me gustaría convertir (eficientemente) todo esto en ints, pero me siento un poco denso, ya que no puedo hacer que funcione para mi vida. He estado intentando: newVals = [int (x) para x en [fila para filas en valores]]

Donde 'valores' 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 idioma aceptado para este tipo de cosas?

12
aped 17 jun. 2011 a las 09:20

5 respuestas

La mejor respuesta

Esto deja las entradas anidadas

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

Si las quieres aplanadas, eso tampoco es difícil.

Para Python3 map() devuelve un iterador. Podrías usar

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

Pero puede preferir usar los LC anidados en ese caso

[[int(y) for y in x] for x in values]
12
John La Rooy 17 jun. 2011 a las 05:31

Simplemente usa un orden y paréntesis incorrectos, debe ser:

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

O si necesita una lista de la lista en la salida, entonces:

map(lambda row: map(int, row), inputVals)
1
Artsiom Rudzenka 17 jun. 2011 a las 05:32

Una forma fea es usar evalf:

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

Si no le importan todos sus números en una matriz, puede ir:

>>> a = [['1','2','3'],['4','5','6'],['7','8','9']]
>>> map(int,sum(a,[]))
[1, 2, 3, 4, 5, 6, 7, 8, 9]
0
robert king 17 jun. 2011 a las 06:49

¿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]]
10
JBernardo 17 jun. 2011 a las 05:24

Otra solución

a = [[1, 2, 3], [7, 8, 6]]
list(map(lambda i: list(map(lambda j: j - 1, i)), a))
[[0, 1, 2], [6, 7, 5]] #output
0
Muhammad Younus 20 mar. 2018 a las 08:22