Lubię najprostsze rozwiązania, które są możliwe (w tym efektywność). Nie zawsze jest jasne, czy takie jest rozwiązanie. W każdym razie, range()
w Pythonie 3 jest generatorem. Możesz go zawinąć do dowolnej konstrukcji, która wykonuje iterację. list()
jest w stanie zbudować wartość listy z dowolnej iterowalnej. Operator +
dla list nie jest konkatenacją. Używam mniejsze wartości w przykładzie:
>>> list(range(5))
[0, 1, 2, 3, 4]
>>> list(range(10, 20))
[10, 11, 12, 13, 14, 15, 16, 17, 18, 19]
>>> list(range(5)) + list(range(10,20))
[0, 1, 2, 3, 4, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]
To co range(5) + range(10, 20)
dokładnie robił w Pythonie 2.5 - bo range()
powrócił listę.
W Pythonie 3 jest to przydatne tylko wtedy, gdy naprawdę chcesz skonstruować listę. W przeciwnym razie zalecam rozwiązanie Lev Levitsky's z itertools.chain.Dokumentacja pokazuje również bardzo prosty realizacji:
def chain(*iterables):
# chain('ABC', 'DEF') --> A B C D E F
for it in iterables:
for element in it:
yield element
Rozwiązanie przez Inbar Rose jest w porządku i funkcjonalnie równoważne. W każdym razie moja +1 trafia do Leva Levitsky'ego i do jego argumentu na temat używania standardowych bibliotek. Od Zen Pythona ...
W obliczu dwuznaczności, odrzucić pokusę do odgadnięcia.
#!python3
import timeit
number = 10000
t = timeit.timeit('''\
for i in itertools.chain(range(30), range(2000, 5002)):
pass
''',
'import itertools', number=number)
print('itertools:', t/number * 1000000, 'microsec/one execution')
t = timeit.timeit('''\
for x in (i for j in (range(30), range(2000, 5002)) for i in j):
pass
''', number=number)
print('generator expression:', t/number * 1000000, 'microsec/one execution')
Moim zdaniem itertools.chain
jest bardziej czytelny. Ale co tak naprawdę jest ważne ...
itertools: 264.4522138986938 microsec/one execution
generator expression: 785.3081048010291 microsec/one execution
... to około 3 razy szybciej.
wersja python? –
wersja mojego pytona jest wersja 3.3.0 .. Mam również zaktualizowane w moim pytaniu – MAG
Co chcesz dostać w wyniku (jak w jakiego typu danych - zwykły listy, generator, coś innego)? Co chcesz zrobić z wynikiem? –