#pragma section-numbers off == Receita: Acha maior linha em arquivo == ''RodrigoVieira'' 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 == {{{ #!python def achaMaiorLinhaEmArquivo(nome_arquivo): # extrai as linhas do arquivo em uma lista arquivo = file(nome_arquivo) linhas_arquivo = [ linha for linha in arquivo ] arquivo.close() # cria uma lista com o comprimento de cada linha compr_linhas = [ len(linha) for linha in linhas_arquivo ] # 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) # retorna todas as linhas que tenham o comprimento da maior linha maior_linha = [ linha for linha in linhas_arquivo if len(linha)==compr_maior_linha ] return maior_linha if __name__ == "__main__": print "\n".join(achaMaiorLinhaEmArquivo("meu_arquivo.txt")) }}} == Tudo Em Uma Linha == ''FelipeLessa'' Sim, sim... é possível colocar tudo em uma só linha =). Acho que isso deve funcionar: {{{ #!python achaMaiorLinhaEmArquivo = lambda f:reduce(lambda x,y:x[0]>y[0]and x or y,\ [(len(l), l)for l in file(f).readlines()])[1] if __name__ == "__main__": print achaMaiorLinhaEmArquivo("meu_arquivo.txt") }}} E se você quiser que seja devolvida o tamanho da linha também, é só você retirar o {{{[1]}}} que tem no final: {{{ #!python achaMaiorLinhaEmArquivo = lambda f:reduce(lambda x,y:x[0]>y[0]and x or y,\ [(len(l), l)for l in file(f).readlines()]) if __name__ == "__main__": print "A maior linha tem %d caracteres e é:\n%s" % \ achaMaiorLinhaEmArquivo("meu_arquivo.txt") }}} A única diferença é que esta função retorna apenas a primeira maior linha, e não todas as linhas que compartilham do maior tamanho. Mas como o nome da função está no singular ("acha maior linha em arquivo"), acredito que isso sirva. Caso você venha me dizer que essa função não tem uma linha, e sim duas, é porque aqui no Wiki não fica bem uma linha com mais de 80 caracteres, então eu tive de quebrá-la, mas nada o impede de juntar de novo em uma só =). Volta para CookBook. ---- RodrigoVieira, FelipeLessa