Mi piacciono le soluzioni più semplici possibili (compresa l'efficienza). Non è sempre chiaro se la soluzione sia tale. Ad ogni modo, lo range()
in Python 3 è un generatore. Puoi racchiuderlo in qualsiasi costrutto che esegue l'iterazione. Lo list()
è in grado di costruire un valore di lista da qualsiasi iterabile. L'operatore +
per le liste concatena. Sto usando valori più piccoli nell'esempio:
>>> 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]
Questo è ciò che ha fatto esattamente range(5) + range(10, 20)
in Python 2.5 - perché range()
restituito un elenco.
In Python 3, è utile solo se si vuole veramente costruire l'elenco. Altrimenti, raccomando la soluzione Lev Levitsky's con itertools.chain.La documentazione dimostra anche l'implementazione molto semplice:
def chain(*iterables):
# chain('ABC', 'DEF') --> A B C D E F
for it in iterables:
for element in it:
yield element
La soluzione da Inbar Rose va bene e funzionalmente equivalente. Ad ogni modo, il mio +1 va a Lev Levitsky e al suo argomento sull'uso delle librerie standard. Da Lo Zen di Python ...
A fronte di ambiguità, rifiutare la tentazione di indovinare.
#!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')
A mio parere, il itertools.chain
è più leggibile. Ma cosa è davvero importante ...
itertools: 264.4522138986938 microsec/one execution
generator expression: 785.3081048010291 microsec/one execution
... è circa 3 volte più veloce.
versione di Python? –
la versione del mio python è la versione 3.3.0 .. ho anche aggiornato nella mia domanda – MAG
Cosa vuoi ottenere come risultato (come in, che tipo di dati - un elenco semplice, un generatore, qualcos'altro)? Cosa vuoi fare con il risultato? –