여기에 Generators/List Comprehension에 관한 일반적인 Python 질문이 있습니다. 주어진 반복 가능한 x
를 들어 두 번 필요하다면 목록 내역에서 한 번만 함수 호출을 수행하십시오.
[ flatten(e) for e in x if flatten(e) != '' ]
는 한 번만 호출 좋을 것이다 있도록 기능 flatten
은 잠재적으로 비싸다. 표현할 일선에서이 작업을 수행 할 수있는 방법이 있습니까?
여기에 Generators/List Comprehension에 관한 일반적인 Python 질문이 있습니다. 주어진 반복 가능한 x
를 들어 두 번 필요하다면 목록 내역에서 한 번만 함수 호출을 수행하십시오.
[ flatten(e) for e in x if flatten(e) != '' ]
는 한 번만 호출 좋을 것이다 있도록 기능 flatten
은 잠재적으로 비싸다. 표현할 일선에서이 작업을 수행 할 수있는 방법이 있습니까?
둥지 발전기 :-) 더 나은 생각하지 않습니다 :
당신 은는 또한 다음과 같이 작성할 수있다
[item for item in (flatten(e) for e in x) if item != '']
또는 :
[item for item in map(flatten, x) if item != '']
아니요 ... 일반적으로 2 단계로 수행하는 것이 좋습니다.
flattened = (flatten(e) for e in x)
[f for f in flattened if f]
당신은 목록 - 완에 발전기를 둘 수 있었다, 그러나 나는 그 일을하는 것은 약간의 이득 (IMHO)에 대한 가독성을 다치게하는 경향이 있음을 발견 : 첫 번째 단계는 두 번째 단계 필터를 평평하게.
list(filter(None, map(flatten, e)))
하지만 그
나는이 대답을 많이 좋아한다! 질문이 한 줄짜리 언어로 표현되었지만, 두 줄로 나누면 이모티콘을 더 쉽게 읽을 수 있습니다. – halloleo
map
기능을 사용하십시오.
[ e for e in map(flatten, x) if e != '' ]
nit : 불필요한 람다 ...'map (flatten, x)'도 마찬가지입니다. – mgilson
두 개의 질문이 (가) * * 플래그 ... "로컬 변수"질문의 대답은 참으로이 질문에 대한 도움말을 할 수 있지만, 대답의 간결함이 제공하는 중복 충분히 공유하는 경우 확실하지 @selcuk Mmmh, 여기에 "지역 변수"질문에 대한 답변에 필적 할만한 것이 없습니다. – halloleo
나는 받아 들여지는 응답조차도 여기에서 거의 동일하다는 것에 동의하지 않는다. – Selcuk