我正在使用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()
直到它结束,然后它会从头开始选择函数。
任何人都有类似我能看到的类似的例子吗?
答案 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)]()