associação pythonbrasil[11] django zope/plone planet Início Logado como (Entrar)

Diferenças para "AchaMaiorLinhaEmArquivo"

Diferenças entre as versões de 3 e 5 (2 versões de distância)
Revisão 3e 2004-05-05 13:39:25
Tamanho: 1737
Comentário:
Revisão 5e 2004-05-05 14:06:40
Tamanho: 1325
Comentário:
Deleções são marcadas assim. Adições são marcadas assim.
Linha 8: Linha 8:
Nas linhas 12 e 13, onde eu preciso pegar o maior número dentro de uma lista, eu estou ordenando a lista em ordem decrescente e então pegando o primeiro valor. Acredito que haja uma forma mais elegante de fazer isso, algo como max(lista), mas ainda não encontrei..estou aberto a sugestões (sinta-se livre pra alterar o código diretamente e cortar essa parte do comentário...)

Sou capaz de jurar que as linhas 7-16 podem ser reduzidas a 1 linha, só não sei como ainda :)
Sou capaz de jurar que as linhas 8-14 podem ser reduzidas a 1 linha, só não sei como ainda :)
Linha 25: Linha 23:
    #ordena a lista em ordem decrescente
    #(outra forma de fazer isso seria usar um .sort() e depois um .reverse())
    compr_linhas.sort(lambda x,y: cmp(y,x))
    compr_maior_linha = compr_linhas[0]
    #acha o maior numero dentro da lista de comprimentos,
    #ou seja, qual a o comprimento da maior linha
    compr_maior_linha = reduce(lambda x,y: max(x,y), compr_linhas)

Receita: Acha maior linha em arquivo

Eu precisava de uma função que retornasse, dentro de um arquivo .txt, a maior linha (linha de maior comprimento). Talvez seja útil para mais alguém. Esse código também pode ser facilmente adaptado para retornar qual a maior string dentro de uma lista (só tirar a parte relativa à abertura de arquivo).

Sou capaz de jurar que as linhas 8-14 podem ser reduzidas a 1 linha, só não sei como ainda :)

Código

   1 def achaMaiorLinhaEmArquivo(nome_arquivo):
   2     #extrai as linhas do arquivo em uma lista
   3     arquivo = file(nome_arquivo)
   4     linhas_arquivo = [linha for linha in arquivo]
   5     arquivo.close()
   6     
   7     #cria uma lista com o comprimento de cada linha
   8     compr_linhas = [len(linha) for linha in linhas_arquivo]
   9     
  10     #acha o maior numero dentro da lista de comprimentos,
  11     #ou seja, qual a o comprimento da maior linha
  12     compr_maior_linha = reduce(lambda x,y: max(x,y), compr_linhas)
  13     
  14     #retorna todas as linhas que tenham o comprimento da maior linha
  15     maior_linha = [linha for linha in linhas_arquivo if len(linha)==compr_maior_linha]
  16     return maior_linha
  17     
  18 if __name__ == "__main__":
  19     print "\n".join(achaMaiorLinhaEmArquivo("meu_aquivo.txt"))

Volta para CookBook.


RodrigoVieira