如何在Python中同时为几个不同的列表进行相同的迭代

时间:2015-01-25 11:26:27

标签: python list python-2.7 iterator

如果我有不同长度的多个列表,有一种简单的方法可以对所有列表进行相同的迭代。

所以写了类似的东西:

for item in list1:
    function(item)
for item in list2:
    function(item)
.
.
.
for item in listn:
   function(item)
我只写了类似的东西:

for item in list1,list2,...,listn:
    function(item)

我知道你可以通过组合列表来做到这一点我希望比每次调用函数时更有效地组合它们

2 个答案:

答案 0 :(得分:11)

itertools module涵盖了与迭代有关的任务。

你有chain() function可以做

import itertools
for item in itertools.chain(list1, list2, list3):
    function(item)
BTW,整个标准的lib文档值得一读,有很多有趣的东西可以阻止你重新发明轮子。

答案 1 :(得分:2)

您可以创建一个generator expression,它会逐个从个别列表中提供项目,例如

for item in (elem for c_list in (list1, list2, list3) for elem in c_list)):
    function(item)

例如,

>>> def function(item):
...     print item
... 
>>> list1, list2, list3 = [1, 2], [3, 4], [5, 6]
>>> for item in (elem for c_list in (list1, list2, list3) for elem in c_list):
...     function(item)
... 
1
2
3
4
5
6

注意:我们创建的生成器表达式不会连接所有列表,但它只是迭代列表的元组,然后迭代各个列表以逐个获取元素。