我知道一个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”。
答案 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]]