11 de novembro de 2010

Ordenando e embaralhando uma lista

Normalmente precisamos ordenar uma lista
Para isso, o método sort() é muito simples e direto:
>>> lista = ['bbb', 'yyy', 'mmm', 'aaa', 'www', 'ddd']
>>> lista.sort()
>>> print lista
['aaa', 'bbb', 'ddd', 'mmm', 'www', 'yyy']
>>>

Agora imagine que você queira ordenar sua lista pelo tamanho (len()) dos itens:
>>> lista = ['aaaa', 'z', 'bbbbbbbbbb', 'nnn']
>>> def por_tamanho(item):
...   return len(item)
... 
>>> sorted(lista, key=por_tamanho)
['z', 'nnn', 'aaaa', 'bbbbbbbbbb']
>>> 

É importante notar que lista.sort() modifica a lista e sorted() retorna uma nova lista classificada.

Para explorar mais o assunto, leia o manual e esse HowTo Sorting.


E para embaralhar uma lista, como fazer?
Considerando a lista usada no 1º exemplo, faça assim:
>>> import random
>>> random.shuffle(lista)
>>> print lista
['ddd', 'aaa', 'mmm', 'yyy', 'bbb', 'www']

Eu sou Vinicius Assef, um programador do século passado que gosta de Python, pratica Lean Development e acredita em Deus. Você pode me contactar por email ou twitter.

8 comentários:

  1. Se quiser, pode usar uma função lambda para ficar mais sucinto:

    sorted(lista, key=lambda x: len(x))

    ResponderExcluir
  2. Blog muito interessante, adorei! Coloquei você na minha lista de blogs, ok? Meu blog é www.aprendajava.com . Abraços!

    ResponderExcluir
  3. Gostei da dica para embaralhar uma lista! Muito bom o blog.

    ResponderExcluir
  4. Notei agora que para classificar a lista pelo tamanho de cada item, bastaria fazer assim: sorted(lista, key=len)

    ResponderExcluir
  5. Muito bom mesmo. Contudo não consigo embaralhar pelo mesmo método se na lista eu tivesse na verdade números inteiros. Existe alguma outra maneira?

    ResponderExcluir
    Respostas
    1. Anônimo, com números inteiros funciona exatamente da mesma forma.

      Excluir
  6. nao conhecia o metodo sort() e ate ao momento tinha vindo a fazer o ordenamento de listas atraves de comparações, obrigado pelo seu post

    ResponderExcluir

Marcadores