#python #python-3.x
#python #python-3.x
Вопрос:
Я знаю, что функция map получает функцию в качестве своего первого аргумента, а следующие аргументы — это итераторы, к которым необходимо применить переданную функцию. Мой вопрос здесь в том, есть ли у меня 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))
x = мощность, до которой должен быть поднят список
Я хочу знать, есть ли какой-либо способ передачи аргументов в функции map. В моем случае ‘reverse = True’ для отсортированной функции.
Комментарии:
1. Я полагаю, что вам следует отдать предпочтение вашему решению с использованием лямбда-выражения.
Ответ №1:
Вы можете использовать functools.partial
для этого:
import functools
new_list = list(map(functools.partial(sorted, reverse=True), l))
Комментарии:
1. Я собирался опубликовать это, потому что это правильный путь. Но вместо этого написал другой вариант, потому что вы были первым 😉
2.
functools.partial
это способ python для выполнения функций.3. @TheNamesAlc Да, именно так это и работает, вы можете прочитать больше из документации: docs.python.org/3/library/functools.html#functools.partial
Ответ №2:
Вы можете использовать a lambda
для переноса функции:
map(lambda x: sorted(x, reversed=True), l)
или:
map(lambda i, j: pow(i, j), list,itertools.repeat(x))
Комментарии:
1. Это то, что позволяет вам делать lambda.
Ответ №3:
Есть много способов сделать это.
Вы могли бы использовать 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)
Комментарии:
1. Вы правы. 2 и 3 технически одинаковы. Они оба лениво оцениваются. Насколько я знаю, единственное отличие заключается в синтаксисе. Я предпочитаю третий, потому что для меня его легче понять.
Ответ №4:
Для этого конкретного случая вы также можете использовать понимание списка —
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]]