2010-10-06 6 views

Répondre

5

Une façon de faire est d'utiliser _:

[foo() for _ in range(10)] 

Cela signifie exactement la même chose, mais par convention l'utilisation de _ indique au lecteur que l'indice n'est pas réellement utilisé pour quoi que ce soit.

Vraisemblablement, foo() renvoie quelque chose de différent chaque fois que vous l'appelez. Si elle ne le fait pas, et il retourne la même chose à chaque fois, vous pouvez:

[foo()] * 10 

pour reproduire le résultat de l'appel une fois foo(), 10 fois dans une liste.

-1

Nullement plus élégant, mais:

[x() for x in [foo]*10] 

Je pense au-delà, vous devez aller à Ruby;)

-2

map(lambda _ : foo(), range(10))

bien que ce métiers votre problème avec un iterator sens i avec un nouvel argument sans signification à l'expression de lambda.

0

map serait bien si foo() a pris un argument, mais ce n'est pas le cas. Ainsi, au lieu, créer un lambda factice qui prend un argument entier, mais appelle simplement foo():

map(lambda i:foo(), range(10)) 

Si vous êtes sur Python 3.x, carte retourne un itérateur au lieu d'une liste - il suffit de construire une liste it:

list(map(lambda i:foo(), range(10))) 
+0

Downvote? Comment venir? – PaulMcG