2017-11-29 3 views
0

:문제 왜이 빈리스트 반환

def word_lengths(phrase): 

    return list(map(lambda x: len(x) , phrase.split())) 
:이 구절의 각 단어의 길이의 목록을 반환로

def word_lengths(phrase): 

    result = [] 
    map(lambda x: result.append(x) , phrase.split()) 
    return result 

+0

실제 출력 대 예 입력 (구) 예상 출력을 제공하십시오. – alfasin

+0

'lambda : len (x)'는'len'을 말하는데 좀 더 복잡한 방법 일 뿐이며, 전체 내용을리스트 이해력으로 좀 더 파이썬 적으로 표현할 것입니다. split()]'. – mkrieger1

+0

[파이썬 3지도 사전 업데이트 방법]을 다른 사전 목록에 복사 할 수 있습니다 (https://stackoverflow.com/questions/30000391/python-3-map-dictionary-update-method-to-a-list-of). -other-dictionaries) ('dict.update'에 관한 것이고'list.append'에 관한 것이 아니라 그 외 모든 것은 동일합니다) – ShadowRanger

답변

2

파이썬 3에서 map은 느리게 평가되는 생성자가됩니다.

당신은 그것의 list 생성자를 호출하여, 예를 들어, 적용하기를 반복해야합니다

result = [] 
list(map(lambda x: result.append(x) , phrase.split())) 
return result 

가이 변이는 당신이 아마 예상했던 result한다.

참고하지만, 그 같은 훨씬 간단한 방법으로 달성 될 수있다 :

return phrase.split() 
+1

부작용에'map '을 남용하는 것은 함수 적 프로그래밍 관용구의 의미를 오해하고 있습니다. map (및 list comprehensions와 generator expression)은 항상 side- 효과가 없으므로 코드에 대해 추론하기가 힘든 많은 거리에서 유령 같은 행동을 피할 수 있습니다. – ShadowRanger

+2

부작용 : 부작용으로'map '을 사용하는 경우가 매우 드뭅니다. 태스크를 병렬 처리하기위한'multiprocessing'' map과 같은 함수)를 강제 실행하는 가장 좋은 방법은 'maxlen'이'0' 인'collections.deque' 생성자에 랩핑하는 것입니다 (이것은 어떤 것을 저장하지 않고 피곤한 반복자를 실행하도록 최적화되어있다.)'collection.deque (map (...), 0)'은 av oid는 무의미한 잠재적으로 큰 임시 목록을'None'으로 만듭니다. – ShadowRanger

+0

부작용 주석을 고맙게 생각합니다. phrase.split()은 훨씬 쉬운 방법입니다. 그것은 파이썬 과정에서지도를 이해하는 프로젝트 질문이었고, 나는 당신이 람다 ... 순전히 학문 내에서 외부 목록을 업데이트 할 수 있는지에 대한 아이디어를 가지고있었습니다. – smackenzie