2009-03-24 8 views
6

J'essaie de parcourir la plage (750, 765) et d'ajouter les numéros non séquentiels 769, 770, 774. Si j'essaie d'ajouter les numéros après la fonction plage, elle renvoie la liste de plage, puis les numéros individuels:Comment puis-je ajouter des nombres non séquentiels à une plage?


>>> 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 nombres dans une seule liste?

Répondre

23

Utilisez l'opérateur + intégré pour ajouter vos numéros non séquentiels à la plage.

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

-1. Ce n'est pas une bonne réponse, pas plus que d'autres. itertools.chain() doit être utilisé. –

+6

pour ajouter 3 numéros? c'est à peine un coup de performance. Il faudra plus de temps pour importer les outils. Si cela est fait dans une boucle sur des milliers de plages, alors oui, vous devriez peut-être envisager la méthode de la chaîne. –

+0

+1: concaténation de liste simple. –

2

recherchez-vous ceci:

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

J'ai pensé à le faire de cette façon, mais je savais qu'il devait y avoir une meilleure façon, plus concise. Bonne suggestion cependant. – adam

+0

Oui, la réponse acceptée est plus courte. Je pensais que vous deviez stocker la liste pour une utilisation ultérieure. – Vasil

+0

Vous avez raison, je dois le stocker. Liste de compréhension à la rescousse! mylist = [x pour x dans la gamme (750, 765) + [769, 770, 774]] – adam

15

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, car il vous permet d'utiliser iterables arbitraires, plutôt que des listes et des listes. C'est aussi plus efficace, ne nécessitant pas de copie de liste. Et il vous permet d'utiliser xrange, ce que vous devriez faire en boucle.

+0

Je ne suis pas familier avec la bibliothèque itertools, je vous en remercie, je vais vous en donner lecture, – adam

6

Les autres réponses sur cette page vous seront très utiles. Juste une note rapide que dans Python3.0, range est un itérateur (comme xrange était dans Python2.x ... xrange est parti dans 3.0). Si vous essayez de le faire dans Python 3.0, veillez à créer une liste à partir de l'itérateur de plage avant de faire l'ajout:

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

ouais, et assurez-vous d'utiliser des parenthèses avec des fonctions! – SilentGhost

+0

Ah, merci. Vous n'avez aucune idée du nombre de fois que j'ai une erreur de syntaxe dans Python 3.0 en raison de la fonction d'impression darn! –

Questions connexes