Tengo una lista de nombres, p. ['Agrajag', 'Colin', 'Deep Thought', ... , 'Zaphod Beeblebrox', 'Zarquon']
. Ahora quiero dividir esta lista en sublistas de igual tamaño, de modo que los límites de los subgrupos estén en la primera letra de los nombres, por ejemplo, AF, GL, MP, QZ, no A-Fe, Fi-Mo, Mu-Pra , Pre-Z.Python: lista de particiones de nombres en sublistas de igual tamaño
sólo podía llegar a una parition estáticamente tamaño que no tiene el tamaño de los subgrupos en cuenta:
import string, itertools
def _group_by_alphabet_key(elem):
char = elem[0].upper()
i = string.ascii_uppercase.index(char)
if i > 19:
to_c = string.ascii_uppercase[-1];
from_c = string.ascii_uppercase[20]
else:
from_c = string.ascii_uppercase[i/5*5]
to_c = string.ascii_uppercase[i/5*5 + 4]
return "%s - %s" % (from_c, to_c)
subgroups = itertools.groupby(name_list, _group_by_alphabet_key)
mejor idea?
P.S .: esto puede parecer un poco como la tarea, pero en realidad es para una página web donde los miembros deben mostrarse en 5-10 pestañas de grupos de igual tamaño.
Eso parece funcionar razonablemente bien con mis datos reales de alrededor de 500 Nombres. ¡Gracias! –
Ah, bien - no estaba seguro de si se escalaría. – senderle
@piquadrat, gracias por aceptar, pero ¡tenga en cuenta el error! Está arreglado arriba. – senderle