2009-03-24 4 views
6

Ich versuche, durch den Bereich (750, 765) zu iterieren und die nicht fortlaufenden Nummern 769, 770, 774 hinzuzufügen. Wenn ich versuche, die Zahlen nach der Bereichsfunktion hinzuzufügen, gibt sie die Bereichsliste zurück, dann die einzelnen Zahlen:Wie kann ich nicht fortlaufende Nummern zu einem Bereich hinzufügen?


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

Wie kann ich alle Zahlen in einer einzigen Liste erhalten?

Antwort

23

Verwenden Sie den integrierten + Operator, um Ihre nicht fortlaufenden Nummern an den Bereich anzuhängen.

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

-1. Dies ist keine gute Antwort, noch ist es für andere. itertools.chain() sollte verwendet werden. –

+6

zum Hinzufügen von 3 Zahlen? das ist kaum ein Performance-Hit. Es wird mehr Zeit benötigen, um itertools zu importieren. Wenn dies in einer Schleife über Tausende von Bereichen getan wird, dann ja, vielleicht sollten Sie die Kettenmethode betrachten. –

+0

+1: Einfache Liste Verkettung. –

2

suchen Sie diese:

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

Ich dachte daran, es so zu machen, aber ich wusste, dass es einen besseren, prägnanteren Weg geben musste. Gute Idee aber. – adam

+0

Ja, die angenommene Antwort ist kürzer. Ich dachte, du müsstest die Liste für den späteren Gebrauch speichern. – Vasil

+0

Sie haben Recht, ich muss es speichern. List Verständnis zur Rettung! mylist = [x für x im Bereich (750, 765) + [769, 770, 774]] – adam

15

Es gibt zwei Möglichkeiten, es zu tun.

>>> 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() ist bei weitem überlegen, da es Ihnen erlaubt, beliebiges Iterables zu verwenden, anstatt nur Listen und Listen. Es ist auch effizienter, kein Kopieren der Liste erforderlich. Und Sie können XRange verwenden, was Sie beim Loopen sollten.

+0

Ich bin nicht vertraut mit der itertools-Bibliothek Vielen Dank, dass Sie das vorgeschlagen haben, ich werde es lesen – adam

6

Die anderen Antworten auf dieser Seite werden Ihnen gut tun. Nur eine kurze Anmerkung, dass in Python 3.0, range ist ein Iterator (wie Xrange war in Python2.x ... xrange ist in 3.0 gegangen). Wenn Sie dies in Python 3.0 versuchen, müssen Sie vor dem Hinzufügen eine Liste aus dem Bereichsiterator erstellen:

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

Ja, und achten Sie darauf, Klammern mit Funktionen zu verwenden! – SilentGhost

+0

Ah, danke. Sie haben keine Ahnung, wie oft ich wegen der verfälschten Druckfunktion in Python 3.0 einen Syntaxfehler bekommen habe! –