Então esse é o meu exercício de hoje: pegar uma string delimitada e transformar numa lista.
É claro que podem existir várias formas de fazer isso, mas eu gostaria da ajuda de vocês para escolher a maneira mais pythônica de fazer isso.
Para dar um toque de realidade, eu resolvi ler o monte de e-mails de um arquivo texto e carregar a tal lista. Lembre-se que em uma linha do arquivo, existirão vários endereços de e-mail delimitados por um ponto-e-vírgula.
Segue abaixo o modo como eu resolvi esse problema:
'''Transforma string delimitada em lista'''
print __doc__
f = open('emails.txt')
emails = []
for linha in f:
emails.extend(email.lower().strip() for \
email in linha.split(';'))
f.close()
emails.sort()
for email in emails:
print email
Será que esse é realmente o melhor modo de resolver essa questão?
A misturada de coisa que eu fiz nas linhas 8 e 9 é uma boa forma de fazer um list comprehension?
E o encadeamento dos métodos
lower() e strip() ficaram bons?Particularmente, me pareceu um pouco javânico e perlínico!
Em python seria essa a forma aconselhável de fazer? Ou será que criei um monstrinho?
Sugestão do Elcio Ferreira em 13/11/2008: http://pastie.org/314379
De todas as sugestões que recebi, eu achei essa do Elcio a forma mais compacta de resolver esse problema. Apesar de achá-la um pouco complicada para iniciantes, eu a escolhi por ter vários conceitos em tão pouco código.
Eu consegui ver como um código pode ser pequeno pode abrir e ler um arquivo tranformando-o em uma string (
read()). Como também pode transformar uma string em lista (t.replace("\n",";").split(";")). Gostei também da forma de mostrar a lista: print "\n".join(sorted(emails))Adicionado em 16/11/2008: Apesar de eu ter escolhido essa alternativa, veja o que rolou nessa thread na lista Python Brasil. Principalmente se você é iniciante. A contribuição do Osvaldo Santana me fez abrir a cabeça para alguns detalhes que eu não havia previsto. A do Paul Eipper mostrou que meu exemplo também poderia ser mais resumido um pouco.
Obrigado pela ajuda de vocês. O newbie aqui tá aproveitando prá caramba! ;-)
Me ajuda aí.
Contribua se você tem alguma informação adicional sobre esse assunto ou se encontrou um erro nesse programa. Afinal, ninguém é perfeito, né?
Comente também se esse exemplo ajudou a você de alguma forma. É gratificante saber. :-)
Não deixe de avisar se você encontrou alguma falha de iniciante que precisa corrigir ou melhorar, pois estou aprendendo. Isso ajuda bastante.
Abraço.
Antes de mais nada a idéia de pegar problemas 'reais' da lista é fenomenal, assim nunca vai faltar assunto para aulas, e assuntos pertinentes, boa sacada!
ResponderExcluirPor vezes a solução aparece na lista mas a descrição dos detalhes posta aqui completa o que na lista dificultaria para um iniciante, valeu cara, se achar uma sugestão melhor envio!
Segue minha versão:
ResponderExcluirhttp://pastie.org/314379
Então.. gostaria de mudar o tópico aqui, liás, já usei o código em questão.. :) obrigado. Você sabe de alguma lib para fazer conexão com o Oracle? Tentei o cx_Oracle, mas não tive sucesso. Uso windows. Abração.
ResponderExcluir