2009-03-24 11 views
6

Próbuję iterować przez zakres (750, 765) i dodawać niesekwencyjne numery 769, 770, 774. Jeśli spróbuję dodać liczby po funkcji zakresu, zwraca listę zakresów, a następnie poszczególne liczby:Jak dodać numery niesekwencyjne do zakresu?


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

Jak mogę uzyskać wszystkie numery na jednej liście?

Odpowiedz

23

Skorzystaj z wbudowanego operatora +, aby dodać swoje niesekwencyjne liczby do zakresu.

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

-1. To nie jest dobra odpowiedź, ani nie jest dla innych. należy użyć itertools.chain(). –

+6

do dodania 3 liczb? to nie jest uderzenie wydajności. Będzie wymagać więcej czasu na import itertools. Jeśli robi się to w pętli z tysięcy zakresów, to tak, może powinieneś rozważyć metodę łańcucha. –

+0

+1: Prosta lista konkatenacji. –

2

szukasz to:

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

Myślałem o zrobieniu tego w ten sposób, ale wiedziałem, że musi być lepszy, bardziej zwięzły sposób. Dobra sugestia. – adam

+0

tak, zaakceptowana odpowiedź jest krótsza. Myślałem, że musisz zachować listę do późniejszego wykorzystania. – Vasil

+0

Masz rację, muszę to zapisać. Wymień zrozumienie na ratunek! mylist = [x dla x w zakresie (750, 765) + [769, 770, 774]] – adam

15

Istnieją dwa sposoby, aby to zrobić.

>>> 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() jest zdecydowanie lepsza, ponieważ pozwala na używanie dowolnych iterables, a nie tylko list i wykazów. Jest także bardziej wydajny, nie wymaga kopiowania list. I pozwala ci korzystać z xrange, co powinieneś zrobić w pętli.

+0

Nie jestem zaznajomiony z biblioteką itertools, dziękuję za sugestię, będę ją czytać – adam

6

Inne odpowiedzi na tej stronie będą Ci dobrze służyć. Krótko mówiąc, w Pythonie 3.0, range jest iteratorem (podobnie jak xrange był w Python2.x ... xrange zniknął w 3.0). Jeśli spróbujesz to zrobić w Pythonie 3.0, przed dodaniem należy utworzyć listę z iteratora zakresu:

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

tak, i pamiętaj, aby użyć nawiasów z funkcjami! – SilentGhost

+0

Ah, dziękuję. Nie masz pojęcia, ile razy dostałem błąd składni w Pythonie 3.0 z powodu funkcji drukowania wątków! –

Powiązane problemy