반응형
파이썬에서 맵을 사용하여 목록을 처리하는 동안 항목 색인 가져 오기
map ()을 사용하여 목록을 처리하는 동안 람다 안에있는 동안 항목의 인덱스에 액세스하고 싶습니다. 어떻게 할 수 있습니까?
예를 들면
ranked_users = ['jon','bob','jane','alice','chris']
user_details = map(lambda x: {'name':x, 'rank':?}, ranked_users)
위의 예에서 각 사용자의 순위를 어떻게 알 수 있습니까?
enumerate 사용 :
In [3]: user_details = [{'name':x, 'rank':i} for i,x in enumerate(ranked_users)]
In [4]: user_details
Out[4]:
[{'name': 'jon', 'rank': 0},
{'name': 'bob', 'rank': 1},
{'name': 'jane', 'rank': 2},
{'name': 'alice', 'rank': 3},
{'name': 'chris', 'rank': 4}]
추신. 내 첫 번째 대답은
user_details = map(lambda (i,x): {'name':x, 'rank':i}, enumerate(ranked_users))
나는 강하게을 통해 지능형리스트 또는 발전기 표현을 사용하는 것이 좋습니다 것입니다 map
및 lambda
보입니다. 목록 이해는 더 읽기 쉽고 부팅 속도가 더 빠릅니다.
또는 map () 및 람다 대신 목록 이해를 사용할 수 있습니다 .
ranked_users = ['jon','bob','jane','alice','chris']
user_details = [{'name' : x, 'rank' : ranked_users.index(x)} for x in ranked_users]
산출:
[{'name': 'jon', 'rank': 0}, {'name': 'bob', 'rank': 1}, {'name': 'jane', 'rank': 2}, {'name': 'alice', 'rank': 3}, {'name': 'chris', 'rank': 4}]
목록 함축은 매우 강력하고 또한 빠른 의 조합보다 더 map
하고 lambda
.
제 생각에 질문은 맵 함수에 관한 것이었고 튜플 인수를 람다에 넣음으로써 발생하는 구문 오류로 인해 선호하는 답변이 부분적으로 정확합니다. 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 배 빠릅니다.
반응형
'program story' 카테고리의 다른 글
Hibernate는 getter가있을 때 항상 setter가 필요합니까? (0) | 2020.12.25 |
---|---|
node-websocket-server : 단일 node.js 프로세스에 대해 여러 개의 개별 "방송"을 가질 수 있습니까? (0) | 2020.12.25 |
파이썬에서 deque가 비어 있는지 확인하는 방법은 무엇입니까? (0) | 2020.12.25 |
파이썬에서 HTML 문서 생성 (0) | 2020.12.25 |
Android :“BadTokenException : 창을 추가 할 수 없습니다. (0) | 2020.12.25 |