Ordenar e embaralhar uma lista

Publicado em 2010-11-11 por Vinicius Assef

Python simplifica muito a ordenação e embaralhamento de listas.

Ordenando

É normal precisarmos ordenar uma lista. Para isso existe o método sort():

>>> lista = ["b", "y", "m", "a", "w", "d"]
>>> lista.sort()
>>> lista
['a', 'b', 'd', 'm', 'w', 'y']

Veja que lista foi modificada.

Agora imagine que você queira ordenar sua lista pelo tamanho dos itens:

>>> lista = ['aaaa', 'z', 'bbbbbbbbbb', 'nnn']
>>> sorted(lista, key=len)
['z', 'nnn', 'aaaa', 'bbbbbbbbbb']

É importante notar que sort() modifica a lista e sorted() retorna uma nova lista classificada, mantendo a original. Se sua lista ocupar muita memória, a segunda abordagem pode ser um problema.

O argumento key pode ser qualquer função, inclusive uma que você mesmo escreveu. Vejamos como ordenar uma lista mostrando primeiro os nomes simples e, depois, os nomes compostos:

>>> def quantos_nomes(s):
...     return s.count(" ")
...
>>> nomes = ["João Vitor Silva", "Zé Maria", "Pedro", "Beth"]
>>> sorted(nomes, key=quantos_nomes)
['Pedro', 'Beth', 'Zé Maria', 'João Vitor Silva']

Para se aprofundar mais no assunto, leia o manual sobre sorted() e sobre HowTo Sorting.

Embaralhando

Para embaralhar uma lista também é muito fácil:

>>> import random
>>> lista = ["b", "y", "m", "a", "w", "d"]
>>> random.shuffle(lista)
>>> print lista
['d', 'a', 'm', 'y', 'b', 'w']

Vinicius Assef

Eu sou apaixonado por Python e shell script.

Aprenda com seus erros e dê nome certo às coisas.