Python中map函数调用双参函数报错的原因及无循环解决方案
问题根源
你遇到的TypeError是因为**map的传参逻辑和你的func参数要求不匹配**:
当你调用map(func, m)时,map会把m中的每个元素(也就是每个(i,j)元组)作为单个参数传递给func,但你的func明确需要两个独立的位置参数i和j,自然就会报"缺少j参数"的错误。
不用for循环的解决方案
下面是几种符合你需求的解决方式,都不需要手动写for循环:
1. 用lambda表达式拆包元组
通过lambda函数把每个元组拆成两个独立参数,再传递给func:
from itertools import product def func(i,j): return i+j m = list(product(range(5),range(7))) x = map(lambda t: func(*t), m) print(list(x))
这里的*t是Python的解包语法,会把元组t里的元素逐个拿出来作为func的参数。
2. 使用itertools.starmap(推荐)
itertools模块里的starmap就是专门为这种场景设计的——它会自动把可迭代对象中的每个元素(元组/序列)拆包成多个参数,再传递给目标函数,写法更简洁直观:
from itertools import product, starmap def func(i,j): return i+j m = list(product(range(5),range(7))) x = starmap(func, m) print(list(x))
3. 修改func以接受元组参数(如果允许改动原函数)
如果你可以调整func的定义,让它直接接收一个元组参数,也能解决问题(注意Python3不再支持函数参数位置的元组解包,所以用下面的兼容写法):
from itertools import product def func(t): i, j = t return i + j m = list(product(range(5),range(7))) x = map(func, m) print(list(x))
内容的提问来源于stack exchange,提问作者user12285025
相关产品推荐
相关产品推荐

