这可以通过 itertools.chain 来完成:
import itertools
l1 = [1, 2, 3, 4]
l2 = [5, 6, 7, 8]
for i in itertools.chain(l1, l2):
print(i, end=" ")
将打印的内容:
1 2 3 4 5 6 7 8
根据文档,chain 执行以下操作:
创建一个迭代器,从第一个可迭代对象返回元素,直到它用完,然后继续下一个可迭代对象,直到所有可迭代对象都用完。
如果您的列表包含在列表中,itertools.chain.from_iterable 可用:
l = [l1, l2]
for i in itertools.chain.from_iterable(l):
print(i, end=" ")
产生相同的结果。
如果您不想为此导入模块,则为其编写函数非常简单:
def custom_chain(*it):
for iterab in it:
yield from iterab
这需要 Python 3,对于 Python 2,只需 yield 使用循环将它们返回:
def custom_chain(*it):
for iterab in it:
for val in iterab:
yield val
除了前面的,Python 3.5 及其扩展的解包泛化,还允许在列表文字中解包:
for i in [*l1, *l2]:
print(i, end=" ")
虽然这比l1 + l2 稍微快一点,但它仍然构造了一个列表,然后将其扔掉;仅将其作为最终解决方案。