Я знаю, что функция карты получает функцию в качестве первого аргумента, а следующие аргументы являются итераторами, к которым необходимо применить переданную функцию. Мой вопрос здесь сказать, если у меня есть 2d список, как это
l=[[1,2,3],[4,5,6],[7,8,9]]
как я могу отсортировать отдельные списки в обратном порядке, чтобы мой вывод
l=[[3,2,1],[6,5,4],[9,8,7]]
Я знаю, что потенциальное решение использует лямбда-функцию, такую как
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]
Я видел, как передать аргументы функции pow с помощью модуля itertools.repeat
map(pow,list,itertools.repeat(x))
х = сила, к которой должен быть поднят список
Я хочу знать, есть ли способ передать аргументы в функции карты. В моем случае 'reverse = True' для отсортированной функции.
Есть много способов сделать это.
Вы можете использовать functools.partial
. Это создает partial
, из- за отсутствия лучшего слова, функции вы передаете к нему. Это своего рода создает новую функцию с некоторыми параметрами, уже переданными в нее.
Для вашего примера это будет:
from functools import partial
rev_sort = partial(sorted, reverse=True)
map(rev_sort, l)
Другой способ - использовать простую лямбду:
map(lambda arr: sorted(arr, reverse=True), l)
Другой способ (мой личный выбор) использует генераторы:
(sorted(arr, reverse=True) for arr in l)
Вы можете использовать lambda
чтобы обернуть функцию:
map(lambda x: sorted(x, reversed=True), l)
или же:
map(lambda i, j: pow(i, j), list,itertools.repeat(x))
Вы можете использовать functools.partial
для этого:
import functools
new_list = list(map(functools.partial(sorted, reverse=True), l)
Для этого конкретного случая вы также можете использовать понимание списка -
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]]