Estoy imprimiendo algunas listas pero los valores no están ordenados.
for f, h, u, ue, b, be, p, pe, m, me in zip(filename, human_rating, rating_unigram, percentage_error_unigram, rating_bigram, percentage_error_bigram, rating_pos, percentage_error_pos, machine_rating, percentage_error_machine_rating): print "{:>6s}{:>5.1f}{:>7.2f}{:>8.2f} {:>7.2f} {:>7.2f} {:>7.2f} {:>8.2f} {:>7.2f} {:>8.2f}".format(f,h,u,ue,b,be,p,pe,m,me)
¿Cuál es la mejor manera de ordenar todas estas listas según los valores en ‘nombre de archivo’?
Así que si:
filename = ['f3','f1','f2'] human_rating = ['1','2','3'] etc.
Entonces la clasificación volvería:
filename = ['f1','f2','f3'] human_rating = ['2','3','1'] etc.
Yo comprimiría y ordenaría
zipped = zip(filename, human_rating, …) zipped.sort() for row in zipped: print "{:>6s}{:>5.1f}…".format(*row)
Si realmente desea recuperar las listas individuales, las clasificaría como se indica arriba, luego las descomprimiré:
filename, human_rating, … = zip(*zipped)
¿Qué tal esto: zip
una lista de tuplas, ordene la lista de tuplas, luego “descomprima”?
l = zip(filename, human_rating, ...) l.sort() # 'unzip' filename, human_rating ... = zip(*l)
O en una línea:
filename, human_rating, ... = zip(*sorted(zip(filename, human_rating, ...)))
Ejecución de la muestra:
foo = ["c", "b", "a"] bar = [1, 2, 3] foo, bar = zip(*sorted(zip(foo, bar))) print foo, "|", bar # prints ('a', 'b', 'c') | (3, 2, 1)
zip
devuelve una lista de tuplas que puede ordenar por su primer valor. Asi que:
for ... in sorted(zip( ... )): print " ... "