如何在“映射”函数调用中将参数传递给函数?

时间:2019-04-15 13:11:52

标签: python python-3.x

我知道一个map函数将一个函数作为其第一个参数,而下一个参数是需要在其上应用传递函数的迭代器。我的问题是说我是否有这样的二维列表

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 =列表必须升高的功率

我想知道参数是否可以通过map函数传递。在我的情况下,排序函数的“ reverse = True”。

4 个答案:

答案 0 :(得分:2)

您可以为此使用functools.partial

import functools

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

答案 1 :(得分:2)

您可以使用lambda来包装功能:

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

或:

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

答案 2 :(得分:1)

有很多方法可以做到。

您可以使用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)

答案 3 :(得分:0)

对于这种特定情况,您还可以使用列表理解-

def get_column_slice_v1(rt, column): assert column >= 0 # Negative column index not supported slice = rt[:, column:column+1] with tf.assert_equal(rt.nrows(), tf.size(slice.flat_values): return tf.identity(slice.flat_values)

def get_colum_slice_v2(rt, column, default=None): assert column >= 0 # Negative column index not supported slice = rt[:, column:column+1] if default is None: defaults = tf.zeros([slice.nrows(), 1], slice.dtype) ele: defaults = tf.fill([slice.nrows(), 1], default) slice_plus_default = tf.concat([rt, defaults], axis=1) slice2 = slice_plus_defaults[:1] return slice2.flat_values // [[3,2,1],[6,5,4],[9,8,7]]