首页 > 解决方案 > 如何在 Python 中的 map 中编写指令?

问题描述

输入是一个列表:["asdf", "ghjk", "lmnop", "zyx"]。

我特别需要对列表的所有元素应用一个函数(所以,我应该使用 map)。该函数应该执行类似 f(x, k) = x + k 的操作,其中 k 是一个等于 1 的常数,x 是一个计数器(因此,x 一开始将为 0,当逐渐迭代列表时,它应该以某种方式增加,但如何增加?)。

假设这些,预期的输出应该是:[1,2,3,4]。

from functools import partial


def f(x, k):
    return x + k


def with_partial(my_list, k=1):
    func = partial(f, k=k)  # partial object which acts as a function when called
    x = 0  # counter

    # map -> applies a funciton over all elements of my_list
    rez = list(map(lambda it: (func(x)), my_list))  
    # if I want to increment it, it should look like: rez = list(map(lambda it: x = (func(x)), my_list))
    print("Result with partial: " + str(rez))


if __name__ == "__main__":
    with_partial([5, 6, 7])
    with_partial(["asdf", "ghjk", "lmnop", "zyx"])
     

但输出是:

Result with partial: [1, 1, 1]
Result with partial: [1, 1, 1, 1]

但我希望它是这样的:

Result with partial: [1, 2, 3]
Result with partial: [1, 2, 3, 4]

对于这类问题,我可以很容易地使用列表推导,但我需要了解如何在 map 中编写指令,以便有效地增加计数器。或者...关于部分函数有什么我应该知道的,但我不知道吗?如何使用函数式编程解决此类问题?

标签: pythondictionarylambdapartialfunctools

解决方案


推荐阅读