2016-12-29 1 views
-3

나는 람다 (Lambda) 함수를 사용하여 목록에서 1 개의 특정 요소를 인쇄하려고하는데 문제가 있습니다.lambda funtion은 요소 대신 전체 목록을 반환합니다.

난 내가 람다를 사용하여 필터링 할 목록을 가지고 있고 나는 목록에서 전용 "파이썬"을 인쇄 할 :

languages = ["HTML", "JavaScript", "Python", "Ruby"] 

내가 콘솔 대신에게로 인쇄 전체 목록을 실행! 내가 뭘 잘못했는지 알지 못한다.

languages = ["HTML", "JavaScript", "Python", "Ruby"] 

print filter(lambda x: x[2], languages) 

의견이 있으십니까?

+2

이 [2] 언어로 충분하지 않습니다. – YOBA

답변

5

filter()세 번째 글자이 있고 비어 있지 않은 모든 요소를 ​​반환하도록 요청합니다. 모든 요소에 해당되는 내용이므로 전체 목록을 얻을 수 있습니다. 필터 함수는 필터링 된 목록의 모든 요소에 적용됩니다. 기능이 None 경우 기능이 None[item for item in iterable if item]없는 경우 filter(function, iterable)[item for item in iterable if function(item)]에 해당

참고하는 [filter() 기능 문서 (에서.

당신이 3 요소를 원한다면, 당신은 사용하지 말아야합니다 필터링을 선택하면 해당 요소 하나만 선택하십시오.

print languages[2] 

특정 값으로 필터링하려면 lambda을 입력하면 목록에서 검색하려는 값에 대해 True을 반환합니다. 당신은 예를 들어, P로 시작하는 모든 값에 대한 질문을 할 수 :

print filter(lambda x: x.startswith('P'), languages) 
+0

기본적으로 필터 함수에는 for 루프가 내장되어 있습니다. –

+0

@ DanielBäck : 네,'filter()'함수는 요소를 필터링하기 위해 입력리스트를 반복해야합니다. –

1

당신은 다음과 같이 필터링 할 수 있습니다

languages = ["HTML", "JavaScript", "Python", "Ruby"] 

print filter(lambda x: x=='Python', languages) 
관련 문제