python-3.x - python - 如何将参数传递给“map”中的函数功能调用?

我知道map函数将函数作为其第一个参数,下一个参数是需要应用传递函数的迭代器。 我的问题是,如果我有一个像这样的2d列表


l=[[1,2,3],[4,5,6],[7,8,9]]



如何按相反顺序对各个列表进行排序以便我的输出


l=[[3,2,1],[6,5,4],[9,8,7]]



我知道一个潜在的解决方案是使用一个lambda函数,比如


list(map(lambda x:x[::-1],l))



我想要这样的东西


list(map(sorted, l,'reversed=True'))



其中'reversed=true'是排序的参数

比如:


>>> newList=[1,2,3]


>>> sorted(newList,reversed='True')


>>> [3,2,1]



我已经了解了如何使用 itertools.repeat 模块将参数传递给pow函数


map(pow,list,itertools.repeat(x))



要向它的引发列表的x=power

我想知道是否有任何方法可以在映射函数中传递参数。 在我的例子中,排序函数的'reverse=true'。

时间:

你可以为此使用 functools.partial:


import functools



list(map(functools.partial(sorted, reversed=True), l)



你可以使用 lambda 包装函数:


map(lambda x: sorted(x, reversed=True), l)



或者:


map(lambda i, j: pow(i, j), list,itertools.repeat(x))



对于这个具体案例,你还可以使用列表理解-

l=[[1,2,3],[4,5,6],[7,8,9]]

l = [list(reversed(sublist)) for sublist in l] //[[3,2,1],[6,5,4],[9,8,7]]

有很多方法可以做到这一点。

你可以使用 functools.partial 。它创建了一个 partial,因为缺少一个更好的字词,你传递给它的函数。 它创建了一个新函数,其中一些参数已经传入它。

对于你的示例,它将是:


from functools import partial


rev_sort = partial(sorted, reverse=True)


map(rev_sort, l)



另一种方法是使用一个简单的lambda:


map(lambda arr: sorted(arr, reverse=True), l)



另一种方式( 我的个人选择),就是使用生成器:


(sorted(arr, reverse=True) for arr in l)



...