简体   繁体   中英

How to pass arguments to a function in “map” function call?

I know a map function gets a function as its first argument and the next arguments are iterators on which the passed function needs to be applied. My question here is say if I have a 2d list like so

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

how can I sort the individual lists in reverse order so my output is

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

I know a potential solution is using a lambda function such as

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

I want something like this

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

where 'reversed=True' is an argument that sorted takes

eg:

>>> newList=[1,2,3]
>>> sorted(newList,reversed='True')
>>> [3,2,1]

I have seen how to pass arguments to a the pow function using the itertools.repeat module

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

x=power to which the list must be raised

I want to know if there is any way the arguments can be passed in a map function. In my case the 'reverse=True' for the sorted function.

You can use functools.partial for this:

import functools

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

You can use a lambda to wrap the funtion:

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

or:

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

There are many ways to do it.

You could use functools.partial . It creates a partial , for the lack of a better word, of the function you pass to it. It sort of creates a new function with some parameters already passed into it.

For your example, it would be:

from functools import partial
rev_sort = partial(sorted, reverse=True)
map(rev_sort, l)

The other way is using a simple lambda:

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

The other other way (my personal choice), is using generators:

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

For this specific case, you can also use a list comprehension -

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]]

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM