通过`map`使用带有多个参数的函数

4 python lambda typeerror python-3.x

我正在尝试将需要2个参数的函数映射到列表:

my_func = lambda index, value: value.upper() if index % 2 else value.lower()

import string
alphabet = string.ascii_lowercase

n = map(my_func, enumerate(alphabet))
for element in n:
    print(element)
Run Code Online (Sandbox Code Playgroud)

这给了我一个TypeError: <lambda>() missing 1 required positional argument: 'value'

将lambda映射到此输入的正确方法是什么?

dec*_*eze 5

map会将每个值从enumerate单个参数传递到回调,lambda即将以元组作为参数调用。如果map解压缩看起来不可解压缩的参数,那将是非常令人惊讶的行为,因为那样的话,其行为将取决于其迭代的值。

要扩展可迭代的参数,请starmap改用,它*在传递参数时“加(星号)”:

from itertools import starmap

n = starmap(lambda index, value: ..., enumerate(alphabet))
Run Code Online (Sandbox Code Playgroud)


Jea*_*bre 4

Python 无法自动解包 lambda 参数。enumerate返回 a tuple,因此lambda必须将该元组作为唯一参数

你需要:

n = map(lambda t: t[1].upper() if t[0] % 2 else t[1], enumerate(alphabet))
Run Code Online (Sandbox Code Playgroud)

map现在考虑到+ + 手动拆包的丑陋lambda,我建议使用替代生成器理解:

n = (value.upper() if index % 2 else value for index,value in enumerate(alphabet))
Run Code Online (Sandbox Code Playgroud)

(我删除了lower()呼叫,因为您的输入已经是小写)