légèrement méta-réponse (?) À Autoplectic's suggestion d'utiliser zip()
Avec 3 lignes dans le fichier d'entrée (à partir des données fournies dans la question):
Le procédé zip()
prend une moyenne de 0.404729390144
secondes, par rapport à 0.341339087486
avec la simple boucle for la construction de deux listes (le code de mipadi's actuellement la réponse acceptée).
Avec 10.000 lignes dans le fichier d'entrée (. Aléatoire généré 3-12 mots de caractères I réduit la timeit.repeat()
valeurs 100 fois, répété deux fois):
zip()
pris une moyenne de 1.43965339661
secondes, par rapport à 1.52318406105
avec le pour la boucle.
Les deux benchmarks ont été réalisés en utilisant la version Python 2.5.1
A peine une énorme différence .. Compte tenu de la façon beaucoup plus lisible la simple boucle est, je vous conseille de l'utiliser .. Le code zip
pourrait être un peu plus rapide avec de gros fichiers, mais la différence est d'environ 0,083 secondes avec 10.000 lignes ..
Code Benchmarking:
import timeit
# https://stackoverflow.com/questions/743248/something-wrong-with-output-from-list-in-python/743313#743313
code_zip = """english2german = open('english2german.txt')
eng, ger = zip(*(line.split() for line in english2german))
"""
# https://stackoverflow.com/questions/743248/something-wrong-with-output-from-list-in-python/743268#743268
code_for = """english2german = open("english2german.txt")
englist = []
gerlist = []
for line in english2german:
(e, g) = line.split()
englist.append(e)
gerlist.append(g)
"""
for code in [code_zip, code_for]:
t = timeit.Timer(stmt = code)
try:
times = t.repeat(10, 10000)
except:
t.print_exc()
else:
print "Code:"
print code
print "Time:"
print times
print "Average:"
print sum(times)/len(times)
print "-" * 20
+1 pour une meilleure lisibilité. – tgray