1731
Comentário:
|
1327
|
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 2-16 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 é o comprimento da maior linha compr_maior_linha = reduce(lambda x,y: max(x,y), compr_linhas) |
Linha 35: | Linha 32: |
print str(achaMaiorLinhaEmArquivo("meu_aquivo.txt")) | print "\n".join(achaMaiorLinhaEmArquivo("meu_arquivo.txt")) |
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 2-16 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 é 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_arquivo.txt"))
Volta para CookBook.