Python中如何用map函数实现多变量赋值以生成指定列表?
解决Python中map函数多值赋值的问题
问题出在你对map返回结果的处理逻辑上。当调用map(myfunc, 输入序列)时,返回的迭代器中每个元素都是myfunc输出的元组(比如针对输入1,返回(2, 0))。直接将这个迭代器赋值给两个变量时,Python会尝试把迭代器内的所有元素逐一分配给变量,而你的迭代器有3个元素,自然触发“too many values to unpack”错误。
要得到目标的两个序列,只需用zip(*...)对map的结果进行解包操作:
首先定义自定义函数:
def myfunc(a): return a + 1, a - 1
接着处理输入序列(示例输入为[1,2,3]):
input_seq = [1, 2, 3] a_plus_one, a_minus_one = zip(*map(myfunc, input_seq))
此时a_plus_one的值为(2, 3, 4),a_minus_one的值为(0, 1, 2),完全符合你的预期。如果需要列表类型而非元组,只需用list()转换:
a_plus_one = list(a_plus_one) a_minus_one = list(a_minus_one)
核心原理是*map(...)会将map返回的迭代器中的每个元组拆分为独立参数传递给zip,zip会把这些元组对应位置的元素聚合在一起,最终生成你需要的两个序列。
内容的提问来源于stack exchange,提问作者sushi
相关产品推荐
相关产品推荐

