Получение индекса элемента при обработке списка с использованием карты в python

При обработке списка с помощью map () я хочу получить доступ к индексу элемента внутри лямбды. Как я могу это сделать?

Например

ranked_users = ['jon','bob','jane','alice','chris']
user_details = map(lambda x: {'name':x, 'rank':?}, ranked_users)

Как я могу получить ранг каждого пользователя в приведенном выше примере?

57
задан 25 March 2011 в 16:02

1 ответ

По-моему, вопрос был о функции карты и предпочел, чтобы ответ был частично корректен из-за синтаксической ошибки, вызванной путем помещения аргумента кортежа лямбде 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 быстрее, чем карта в этом тестовом сценарии

1
ответ дан 1 November 2019 в 16:50

Другие вопросы по тегам:

Похожие вопросы: