[pyar] consulta sobre ordenación
Tordek
kedrot en gmail.com
Dom Mar 10 18:32:18 ART 2013
On 10/03/13 16:44, Claudio Aranda wrote:
>>> l = ['eD', 'fC', 'hC', 'iC', 'jD', 'bD', 'fH', 'mS', 'aS', 'mD']
> Para ordenarla debo seguir estas pautas:
>
> 1) Armar subconjuntos de acuerdo a la mayúscula y luego ordenar esos
> subconjuntos por la cantidad de miembros (en orden ascendente), la
> lista queda de la siguiente forma:
> ['fH', 'mS', 'aS', 'fC', 'hC', 'iC', 'jD',
> 'bD', 'eD', 'mD']
Itertools te da una mano:
>>> from itertools import groupby
Ojo que groupby combina elementos consecutivos, así que primero hay
que ordenar la lista por el elemento a agrupar:
>>> [list(v) for k, v in (groupby(sorted(l, key=lambda x:x[1]),
lambda x: x[1]))]
[['fC', 'hC', 'iC'], ['eD', 'jD', 'bD', 'mD'], ['fH'], ['mS', 'aS']]
(Es un poco complicada la línea porque itertols devuelve un iterador
de iteradores.)
Con eso armás los grupos. Después lo ordenás con:
>>> sorted([list(v) for k, v in (groupby(sorted(l, key=lambda
x:x[1]), lambda x: x[1]))], key=lambda x: len(x))
[['fH'], ['mS', 'aS'], ['fC', 'hC', 'iC'], ['eD', 'jD', 'bD', 'mD']]
Fijate que a 'sorted' le paso el parámetro 'key' para decirle con
respecto a qué valor ordenar.
>
> 2) Ahora cada subconjunto debe estar ordenado de manera ascendente y
> de acuerdo a la minúscula, con lo que la lista queda ordenada así:
> ['fH', 'aS', 'mS', 'fC', 'hC', 'iC', 'bD',
> 'eD', 'jD', 'mD']
>>> sorted([sorted(list(v)) for k, v in (groupby(sorted(l,
key=lambda x:x[1]), lambda x: x[1]))], key=lambda x: len(x))
[['fH'], ['aS', 'mS'], ['fC', 'hC', 'iC'], ['bD', 'eD', 'jD', 'mD']]
Agregué un 'sorted' en el list(v) del iterador interno.
Y, finalmente, lo rearmás
>>> [x for sublist in sorted([sorted(list(v)) for k, v in
(groupby(sorted(l, key=lambda x:x[1]), lambda x: x[1]))], key=lambda
x: len(x)) for x in sublist]
['fH', 'aS', 'mS', 'fC', 'hC', 'iC', 'bD', 'eD', 'jD', 'mD']
Obviamente, es perfectamente posible (y recomendable) hacerlo en
varias líneas.
>
> Espero haber sido más claro y agradezco la colaboración, si
> necesitan más aclaraciones avisen
> gracias muchachos
>
>
> El 10 de marzo de 2013 17:58, <enri57ar en gmail.com
> <mailto:enri57ar en gmail.com>> escribió:
>
> Por favor, aclará los criterios de comparación con ejemplos.
> -----Original Message-----
> From: Claudio Aranda <fakirjujuy en gmail.com
> <mailto:fakirjujuy en gmail.com>>
> Sender: pyar-bounces en python.org.ar
> <mailto:pyar-bounces en python.org.ar>
> Date: Sun, 10 Mar 2013 18:24:54
> To: <pyar en python.org.ar <mailto:pyar en python.org.ar>>
> Reply-To: Python Argentina <pyar en python.org.ar
> <mailto:pyar en python.org.ar>>
> Subject: [pyar] consulta sobre ordenación
>
> _______________________________________________
> pyar mailing list pyar en python.org.ar <mailto:pyar en python.org.ar>
> http://listas.python.org.ar/listinfo/pyar
>
> PyAr - Python Argentina - Sitio web: http://www.python.org.ar/
>
> La lista de PyAr esta Hosteada en USLA - Usuarios de Software
> Libre de Argentina - http://www.usla.org.ar
> _______________________________________________
> pyar mailing list pyar en python.org.ar <mailto:pyar en python.org.ar>
> http://listas.python.org.ar/listinfo/pyar
>
> PyAr - Python Argentina - Sitio web: http://www.python.org.ar/
>
> La lista de PyAr esta Hosteada en USLA - Usuarios de Software
> Libre de Argentina - http://www.usla.org.ar
>
>
>
>
> _______________________________________________
> pyar mailing list pyar en python.org.ar
> http://listas.python.org.ar/listinfo/pyar
>
> PyAr - Python Argentina - Sitio web: http://www.python.org.ar/
>
> La lista de PyAr esta Hosteada en USLA - Usuarios de Software Libre de Argentina - http://www.usla.org.ar
>
--
Guillermo O. «Tordek» Freschi. Programador, Escritor, Genio Maligno.
http://tordek.com.ar :: http://twitter.com/tordek
More information about the pyar
mailing list