При обработке списка с помощью map () я хочу получить доступ к индексу элемента внутри лямбды. Как я могу это сделать?
Например
ranked_users = ['jon','bob','jane','alice','chris']
user_details = map(lambda x: {'name':x, 'rank':?}, ranked_users)
Как я могу получить ранг каждого пользователя в приведенном выше примере?
По-моему, вопрос был о функции карты и предпочел, чтобы ответ был частично корректен из-за синтаксической ошибки, вызванной путем помещения аргумента кортежа лямбде lambda (i,x)
, идея перечисляет, хорошо, и надлежащее решение было бы:
map(lambda x: {'name':x[1], 'rank':x[0]}, enumerate(ranked_users))
и некоторая синхронизация для сравнения скорости с пониманием:
def with_map():
ranked_users = range(10 ** 6)
list(map(lambda x: {'name': x[1], 'rank': x[0]}, enumerate(ranked_users)))
def by_comprehension():
ranked_users = range(10 ** 6)
[{'name': x, 'rank': i} for i, x in enumerate(ranked_users)]
from timeit import timeit
time_with_map = timeit(with_map, number=10)
time_with_comprehension = timeit(by_comprehension, number=10)
print('list comprehension is about %.2f x faster than map in this test case' % (time_with_map/time_with_comprehension))
результат испытаний: понимание списка является приблизительно 1,31 x быстрее, чем карта в этом тестовом сценарии