[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