首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >调用多个列表python的循环中的函数

调用多个列表python的循环中的函数
EN

Stack Overflow用户
提问于 2022-06-24 13:30:29
回答 3查看 59关注 0票数 1

我用python编写了一个函数,它接受三个输入变量。现在,我想对每个输入变量的项列表调用函数。所以函数调用是这样的:

代码语言:javascript
复制
 call_function('cat', 'brown', 2)

名单如下:

代码语言:javascript
复制
 category_list = ['cat', 'dog', 'squirrel']
 color_list = ['brown', 'black']
 age = [1,2,3]

现在,我想对每个项目运行函数。因此,它应该返回猫,棕色和1,然后猫,棕色和2,然后猫,棕色和3,然后猫,黑色和1,然后猫,黑色和2,然后猫,黑色和3,然后做同样的狗,然后松鼠。我知道我需要在一个循环中调用这个函数,但是我尝试并失败了几次。有人能帮我吗?

EN

回答 3

Stack Overflow用户

发布于 2022-06-24 13:40:41

使用itertools,它为您完成了任务,调用product函数非常简单。

将变量作为参数提供给itertools.product(....)),然后list()响应。

代码

代码语言:javascript
复制
import itertools
category_list = ['cat', 'dog', 'squirrel']
color_list = ['brown', 'black']
age = [1,2,3]

def call_function(category, color, age):
    print(category, color, age)


combinations = list(itertools.product(category_list, color_list, age))
for combintaion in combinations:
    call_function(combintaion[0], combintaion[1], combintaion[2])

输出

代码语言:javascript
复制
cat brown 1
cat brown 2
cat brown 3
cat black 1
cat black 2
cat black 3
dog brown 1
dog brown 2
dog brown 3
dog black 1
dog black 2
dog black 3
squirrel brown 1
squirrel brown 2
squirrel brown 3
squirrel black 1
squirrel black 2
squirrel black 3

证明

测试这里

迭代工具中的方法代码

代码语言:javascript
复制
def product(*args, repeat=1):
    # product('ABCD', 'xy') --> Ax Ay Bx By Cx Cy Dx Dy
    # product(range(2), repeat=3) --> 000 001 010 011 100 101 110 111
    pools = [tuple(pool) for pool in args] * repeat
    result = [[]]
    for pool in pools:
        result = [x+[y] for x in result for y in pool]
    for prod in result:
        yield tuple(prod)
票数 1
EN

Stack Overflow用户

发布于 2022-06-24 14:28:43

下面是另一种方法,在使用pd.apply创建数据后使用itertools.product

代码语言:javascript
复制
import itertools  

category_list = ['cat', 'dog', 'squirrel']
color_list = ['brown', 'black']
age = [1,2,3]

df=pd.DataFrame.from_records(
    list(itertools.product(
        category_list, color_list, age
    )), columns=['category', 'color', 'age'])

df.apply(lambda row: call_function(row['category'], row['color'], row['age']), axis=1)

结果:

代码语言:javascript
复制
cat brown 1
cat brown 2
cat brown 3
cat black 1
cat black 2
cat black 3
dog brown 1
dog brown 2
dog brown 3
dog black 1
dog black 2
dog black 3
squirrel brown 1
squirrel brown 2
squirrel brown 3
squirrel black 1
squirrel black 2
squirrel black 3

如果函数名为MY_FUNCTION

代码语言:javascript
复制
df.apply(lambda row: MY_FUNCTION(row['category'], row['color'], row['age']), axis=1)

票数 1
EN

Stack Overflow用户

发布于 2022-06-25 07:01:05

我通过循环调用函数来解决这个问题。我确信有一种更有效/更优雅的方法可以做到这一点,但是由于我的df和列表都很小,所以效果很好。想发布我的解决方案,为那些正在工作的小名单和有类似的问题。当然,改善建议是受欢迎的。

代码语言:javascript
复制
for i in category_list: 
    for j in color_list: 
        for k in age: 
            call_function(i,j,k)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72744844

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档