7
votes

Python Range () avec des doublons?

Donc tout le monde sait que je peux obtenir une liste de numéros avec la plage code> comme: xxx pré>

et si je veux, disons, 3 copies de chaque numéro I pourrait utiliser: p> xxx pré>

mais y a-t-il un moyen d'utiliser 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]


1 commentaires

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;)


8 Réponses :


20
votes

Vous pouvez faire: xxx

la plage (3) doit être remplacé par votre nombre de répétitions ...

BTW , vous devez utiliser des générateurs


juste pour le rendre plus clair, le _ est un nom de variable pour quelque chose que vous ne vous souciez pas (aucun nom est autorisé). < / p>

Cette compréhension de la liste utilise des pour des boucles et sont comme ça: xxx


3 commentaires

Le _ 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))


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. :)



8
votes

Essayez ceci:

itertools.chain.from_iterable(itertools.repeat(x, 3) for x in range(5))


0 commentaires

-2
votes
[x for tupl in zip(range(0,5), range(0,5), range(0,5)) for x in tupl]

0 commentaires

-1
votes

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]


0 commentaires

4
votes
list(chain(*([x]*3 for x in xrange(5))))

0 commentaires

1
votes
>>> 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]

0 commentaires

1
votes

Un itérateur cool en utilisant une autre approche: xxx


0 commentaires

2
votes

Il existe un moyen très simple de le faire avec une aide de Numpy Numpy . Exemple: xxx

avec plage Vous pouvez procéder comme suit: xxx

se souvenir de cette // effectue une division entière stricte.


0 commentaires