Question

Je suis en train de parcourir la gamme (750, 765) et ajouter les numéros non séquentiels 769, 770, 774. Si je tente d'ajouter les chiffres après la fonction de la plage, elle retourne la liste de gamme, puis les numéros individuels :


>>> for x in range(750, 765), 769, 770, 774: print x
... 
[750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764]
769
770
774

Comment puis-je obtenir tous les numéros dans une liste unique?

Était-ce utile?

La solution

Utilisez le haut-opérateur + pour ajouter vos numéros non-séquentielle à la plage.

for x in range(750, 765) + [769, 770, 774]: print x

Autres conseils

Il y a deux façons de le faire.

>>> for x in range(5, 7) + [8, 9]: print x
...
5
6
8
9
>>> import itertools
>>> for x in itertools.chain(xrange(5, 7), [8, 9]): print x
...
5
6
8
9

itertools.chain () est de loin supérieure, puisqu'elle vous permet d'utiliser iterables arbitraires, plutôt que des listes et des listes. Il est également plus efficace, ne nécessitant pas la copie de la liste. Et il vous permet d'utiliser xrange, que vous devez lors de la boucle.

Les autres réponses sur cette page vous servira bien. Juste une note rapide que Python3.0, est un itérateur range (comme xrange était en python2.X ... xrange est parti dans la version 3.0). Si vous essayez de le faire en Python 3.0, assurez-vous de créer une liste de la gamme iterator avant de faire l'addition:

for x in list(range(750, 765)) + [769, 770, 774]: print(x)

vous cherchez ceci:

mylist = range(750, 765)
mylist.extend([769, 770, 774])

En python3, puisque vous ne pouvez pas ajouter une liste à une gamme, si pour une raison quelconque, vous ne souhaitez pas importer itertool, vous pouvez également faire la même chose manuellement:

for r in range(750, 765), [769, 770, 774]:
    for i in r: 
        print(i)

ou

for i in [i for r in [range(750, 765), [769, 770, 774]] for i in r]: 
    print(i)
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top