Donc tout le monde sait que je peux obtenir une liste de numéros avec et si je veux, disons, 3 copies de chaque numéro I pourrait utiliser: p> mais y a-t-il un moyen d'utiliser la plage code> comme:
plage code> pour répéter les copies comme ceci à la place? P>
[0, 0, 0, 1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4]
8 Réponses :
Vous pouvez faire: la plage BTW , vous devez utiliser des générateurs p> juste pour le rendre plus clair, le Cette compréhension de la liste utilise des (3) code> doit être remplacé par votre nombre de répétitions ... p>
_ code> est un nom de variable pour quelque chose que vous ne vous souciez pas (aucun nom est autorisé). < / p>
pour code> des boucles code> et sont comme ça: p>
Le _ code> est utilisé dans le code pour montrer que vous ne vous souciez pas de ce que la variable tiendra. Je veux seulement boucler 3 fois mais ne vous souciez pas de l'indice ... c'est une convention, pensée
Le générateur dont je parle est: (i pour i en xrange (5) pour J en xrange (3)) code>
Eh bien, puis utilisez le nom que vous aimez le plus! Sur le générateur que j'ai donné, ça ne fuit pas la variable. :)
Essayez ceci:
itertools.chain.from_iterable(itertools.repeat(x, 3) for x in range(5))
[x for tupl in zip(range(0,5), range(0,5), range(0,5)) for x in tupl]
J'aime le garder simple :)
>>> sorted(list(range(5)) * 3) [0, 0, 0, 1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4]
list(chain(*([x]*3 for x in xrange(5))))
>>> from itertools import chain, izip, tee >>> list(chain.from_iterable(izip(*tee(range(5), 3)))) [0, 0, 0, 1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4]
Un itérateur cool en utilisant une autre approche:
Il existe un moyen très simple de le faire avec une aide de Numpy Numpy fort>. Exemple: avec se souvenir de cette
Même si vous dites que vous ne le voulez pas, triés (la gamme (5) * 3) a l'air assez élégant pour moi;)