循环浏览每个列表项的功能

时间:2016-02-26 17:51:03

标签: python python-3.x

我正在使用Python。

给定一个项目列表,item_list我试图在每个项目上运行一个函数,这些函数应该来自function_list

item_list = [item1, item2, item3, item4, item5, item6]
function_list = [myfunction1, myfunction2, myfunction3] 

我想以某种方式遍历项目并将函数关联到它们: 它应该导致这样的调用:

myfunction1(item1)
myfunction2(item2)
myfunction3(item3)
myfunction1(item4)
myfunction2(item5)
myfunction3(item6)

所以列表中的第一个项目会启动myfunction1(),第二个项目myfunction2()直到它结束,然后它会从头开始选择函数。

任何人都有类似我能看到的类似的例子吗?

4 个答案:

答案 0 :(得分:6)

你可以拉链和骑自行车。稍后迭代:

from itertools import cycle
... etc ...

for item,func in zip(items_list, cycle(functions)):
    func(item)

这是一个完整的例子:

from itertools import cycle

def myfunction1(item):
    print("f1", item)

def myfunction2(item):
    print("f2", item)

def myfunction3(item):
    print("f3", item)

functions = [myfunction1, myfunction2, myfunction3]

items_list = [1,2,3,4,5,6]

for item,func in zip(items_list, cycle(functions)):
    func(item)

这将允许您在结束时从头开始挑选功能。

答案 1 :(得分:1)

只需创建要运行的函数列表,然后在循环中调用它们:

functions = [function1, function2, ...]
for i, item in enumerate(item_list):
    functions[i % len(functions)](item)
    # other code

使用i % len(functions)使其循环回到开头。

答案 2 :(得分:1)

带队列:

from collections import deque
f=deque([f1,f2,...])
for item in item_list :
    f[0](item)
    f.rotate(-1)

答案 3 :(得分:0)

itertools对此非常有用,但如果它是本地编写的,它可能更容易查看和阅读

funcList = [foo1, foo2, bar1, bar2] # each of these are functions

for i, item in enumerate(itemList):
    funcList[i % len(funcList)]()

只是为了可爱,如果你知道按顺序命名的函数,你可以做这样的事情(假设这些是全局函数):

funcList = [globals()["myfunction{}".format(i)] for i in range(1, 8)]
但是,我不会实际部署它。

此外,您甚至不必遍历项目本身。如果是这种情况,你应该做的只是遍历一个范围:

for i in range(len(itemList)):
    funcList[i % len(funcList)]()