¿Hay una manera fácil de ordenar una lista dentro de una lista para que los valores vayan de menor a mayor o viceversa? Hasta ahora solo puedo encontrar información sobre cómo ordenar las listas en función del valor inicial.

Aquí está un ejemplo:

data = [[8,7], [10,5,], [8,10]]

>> [[7,8], [5,10], [8,10]
2
alienmode 13 ene. 2017 a las 20:21

3 respuestas

La mejor respuesta

Lo que tiene es una lista de listas, no hay tuplas involucradas aquí. También puede hacerlo con una combinación de métodos integrados map y sorted:

>>> data = [[8,7], [10,5,], [8,10]]
>>> 
>>> list(map(sorted, data))
[[7, 8], [5, 10], [8, 10]]

En Python3, map devuelve un iterador, por lo que si lo necesita como una lista, debe volver a convertirlo con list, de lo contrario, si lo está utilizando en un bucle, entonces no es necesario convertirlo a una lista Ahorra memoria de esta manera.

Editar:

Respondiendo a tu comentario, puedes hacer algo como:

>>> def f(lst):
        lst = sorted(lst)
        return(lst[0], lst)

>>> print(*map(f, data))
(7, [7, 8]) (5, [5, 10]) (8, [8, 10])

O más compacta pero menos legible:

>>> print(*map(lambda lst: '{} - {}'.format(lst[0], lst), map(sorted, data)), sep='\n')
7 - [7, 8]
5 - [5, 10]
8 - [8, 10]
5
Iron Fist 13 ene. 2017 a las 18:35

Utilice una lista de comprensión para ordenar cada elemento (cada list objeto) en data:

data = [sorted(x) for x in data]

data ahora es:

[[7, 8], [5, 10], [8, 10]]

También puedes hacer esto:

map(sorted, data)

Luego use list en ese objeto map para convertirlo en una lista ...

10
blacksite 19 sep. 2017 a las 12:58

Depende si desea ordenarlos en el lugar o si desea una nueva copia con el orden de la lista

Para la nueva copia, la otra respuesta ya le muestra cómo, por ejemplo

data = [[8,7], [10,5], [8,10]]
new = [ sorted(elem) for elem in data ]
print(new)

Para ordenarlos en el lugar, use un bucle for y llame a .sort

data = [[8,7], [10,5], [8,10]]
for elem in data:
    elem.sort()
print(data)
1
Copperfield 13 ene. 2017 a las 18:24