una - listas anidadas python
Acoplar lista de listas (4)
Aplanar la lista para "eliminar los corchetes" utilizando una lista anidada de comprensión. ¡Esto anulará cada lista almacenada en su lista de listas!
list_of_lists = [[180.0], [173.8], [164.2], [156.5], [147.2], [138.2]]
flattened = [val for sublist in list_of_lists for val in sublist]
Las listas anidadas se evalúan de la misma manera que abren (es decir, agregan nueva línea y pestaña para cada ciclo nuevo. En este caso:
flattened = [val for sublist in list_of_lists for val in sublist]
es equivalente a:
flattened = []
for sublist in list_of_lists:
for val in sublist:
flattened.append(val)
La gran diferencia es que la lista de comp evalúa MUCHO más rápido que el bucle desenredado y elimina las llamadas de adición.
Si tiene varios elementos en una sublista, la compilación de la lista incluso aplanará eso. es decir
>>> list_of_lists = [[180.0, 1, 2, 3], [173.8], [164.2], [156.5], [147.2], [138.2]]
>>> flattened = [val for sublist in list_of_lists for val in sublist]
>>> flattened
[180.0, 1, 2, 3, 173.8, 164.2, 156.5, 147.2,138.2]
Esta pregunta ya tiene una respuesta aquí:
- Aplanar una lista superficial en Python [duplicar] 23 respuestas
Tengo un problema con los corchetes en Python. Escribí un código que produce el siguiente resultado:
[[180.0], [173.8], [164.2], [156.5], [147.2], [138.2]]
Pero me gustaría realizar algunos cálculos con eso, pero los corchetes no me dejan.
¿Cómo puedo eliminar los corchetes? Vi algunos ejemplos para hacer eso, pero no pude aplicarlos a este caso.
Dado
d = [[180.0], [173.8], [164.2], [156.5], [147.2], [138.2]]
y su pregunta específica : ¿cómo puedo eliminar los corchetes?
Usando la comprensión de la lista:
new_d = [i[0] for i in d]
te dará esto
[180.0, 173.8, 164.2, 156.5, 147.2, 138.2]
luego puede acceder a elementos individuales con el índice apropiado, por ejemplo, new_d[0]
le dará 180.0
etc. que luego puede usar para matemáticas.
Si va a tener una colección de datos, tendrá algún tipo de corchete o paréntesis.
Tenga en cuenta que esta solución está dirigida específicamente a su pregunta / problema, no proporciona una solución generalizada . Es decir, funcionará para su caso.
itertools.chain
- esto también servirá para> 1 elemento en cada sublista:
from itertools import chain
list(chain.from_iterable([[180.0], [173.8], [164.2], [156.5], [147.2], [138.2]]))
>>> lis=[[180.0], [173.8], [164.2], [156.5], [147.2], [138.2]]
>>> [x[0] for x in lis]
[180.0, 173.8, 164.2, 156.5, 147.2, 138.2]