Można to zrobić z itertools.chain
:
import itertools
l1 = [1, 2, 3, 4]
l2 = [5, 6, 7, 8]
for i in itertools.chain(l1, l2):
print(i, end = " ")
Które będzie drukować:
1 2 3 4 5 6 7 8
Zgodnie z dokumentacją, chain
sposób następujący:
Złóż iterator która zwraca elementy z pierwszego iterowalnego, dopóki nie jest exh zniekształcona, a następnie przechodzi do następnej iteracji, aż wszystkie iterały zostaną wyczerpane.
Jeśli masz list w liście itertools.chain.from_iterable
jest dostępny:
l = [l1, l2]
for i in itertools.chain.from_iterable(l):
print(i, end= " ")
co daje ten sam rezultat.
Jeśli nie chcesz importować moduł do tego, pisząc funkcję jest dość prosta:
def custom_chain(*it):
for iterab in it:
yield from iterab
Wymaga Python 3, dla Pythona 2, tylko yield
je z powrotem za pomocą pętla:
def custom_chain(*it):
for iterab in it:
for val in iterab:
yield val
w uzupełnieniu do poprzedniego, Python 3.5
z jej wysuniętego rozpakowania uogólnień umożliwia również rozpakowaniu na liście dosłownym:
for i in [*l1, *l2]:
print(i, end=' ')
chociaż jest nieco szybszy niż l1 + l2
nadal tworzy listę, która jest następnie przesuwana; tylko go traktuj jako ostateczne rozwiązanie.