web-dev-qa-db-fra.com

Comment convertir un objet générateur en liste?

Mon code

def yieldlines(thefile, whatlines):
  return (x for i, x in enumerate(thefile) if i in whatlines)

file1=open('/home/milenko/EDIs/site1/newst2.txt','r')
whatlines1 = [line.strip() for line in open('m1.dat', 'r')]

x1=yieldlines(file1, whatlines1)

print x1

J'ai eu

<generator object <genexpr> at 0x7fa3cd3d59b0>

Où dois-je mettre la liste ou dois-je réécrire le code?

Je veux que mon programme écrive le fichier et en lise le contenu pour des lignes spécifiques écrites en m1.dat.J'ai trouvé cette solution Lecture de lignes spécifiques uniquement (Python)

6
Richard Rublev

Si vous avez réellement besoin d'une liste, vous pouvez simplement faire:

lst = list(generator_object)

Cependant, si tout ce que vous voulez est d'itérer à travers l'objet, vous n'avez pas besoin d'une liste:

for item in generator_object:
    # do something with item

Par exemple,

sqr = (i**2 for i in xrange(10)) # <generator object <genexpr> at 0x1196acfa0>
list(sqr) # [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

sqr = (i**2 for i in xrange(10))
for x in sqr:
    print x,
# 0 1 4 9 16 25 36 49 64 81
20
Julien Spronck

Pour convertir une expression de générateur en liste, il suffit de faire:

list(<generator expression>)

Attention cependant, si l'expression du générateur peut générer une liste infinie, vous n'obtiendrez pas ce que vous attendez.

3
Mats Kindahl