No se pueden revertir las listas en Python, obteniendo “No escribir” como lista

Tengo un archivo .py que toma una lista, encuentra el número más bajo, lo coloca en una nueva matriz, elimina el número más bajo de la primera matriz y se repite hasta que la matriz original no contiene más elementos:

 def qSort(lsort): listlength = len(lsort) sortedlist = list() if listlength == 0: return lsort else: while listlength > 0: lmin = min(lsort) sortedlist.append(lmin) lsort.remove(lmin) listlength = len(lsort) return sortedlist 

Ahora, otro archivo .py importa el qSort y lo ejecuta en alguna lista, guardándolo en una variable. Luego trato de usar el .reverse() en la lista y termino obteniéndolo como un NoneType . Intento usar reversed() , pero todo lo que hace es decir "" :

 from qSort import qSort #refer to my first Pastebin qSort = qSort([5,42,66,1,24,5234,62]) print qSort #this prints the sorted list print type(qSort) #this prints  print qSort.reverse() #this prints None print reversed(qSort) #this prints "" 

¿Alguien puede explicar por qué parece que no puedo invertir la lista, no importa lo que haga?

Como menciona jcomeau, la función .reverse() cambia la lista en su lugar. No devuelve la lista, sino que deja qSort alterado.

Si desea “devolver” la lista invertida, de modo que se pueda utilizar como lo intentó en su ejemplo, puede hacer un sector con una dirección de -1

Entonces reemplace print qSort.reverse() con print qSort[::-1]


Usted debe saber rebanadas, sus cosas útiles. Realmente no vi un lugar en el tutorial donde se describió todo a la vez ( http://docs.python.org/tutorial/introduction.html#lists no cubre todo) así que espero que aquí haya algunos ejemplos ilustrativos. ejemplos

La syntax es: a[firstIndexInclusive:endIndexExclusive:Step]

 >>> a = range(20) >>> a [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19] >>> a[7:] #seventh term and forward [7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19] >>> a[:11] #everything before the 11th term [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10] >>> a[::2] # even indexed terms. 0th, 2nd, etc [0, 2, 4, 6, 8, 10, 12, 14, 16, 18] >>> a[4:17] [4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16] >>> a[4:17:2] [4, 6, 8, 10, 12, 14, 16] >>> a[::-1] [19, 18, 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0] >>> a[19:4:-5] [19, 14, 9] >>> a[1:4] = [100, 200, 300] #you can assign to slices too >>> a [0, 100, 200, 300, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19] 

list.reverse () invierte en el lugar y no devuelve nada (Ninguno). por lo que no dices:

 mylist = mylist.reverse() 

tu dices:

 mylist.reverse() 

o alternativamente:

 mylist = list(reversed(mylist)) 

El método de list reverse() ordena la lista en su lugar y devuelve None para recordárselo (de acuerdo con la nota 7 en la documentación ). La función reversed() incorporada devuelve un objeto iterador , que se puede convertir en un objeto de list pasándolo a la función constructora list() esta manera: list(reversed(qSort)) . Puede lograr lo mismo creando una división con un tamaño de paso negativo para que vaya hacia atrás, es decir, qSort[::-1] .

Por cierto, las list también tienen un método de sort() (pero ten cuidado, también devuelve None ;-).