2to3
도구를 사용하여 Py2 -> Py3에서 많은 스크립트를 이식하는 중입니다. 하나 명의 특별한 제안 된 변경은 나에게 약간의 혼란, 그래서 나는 그 몇 가지 도움이 감사하겠습니다 :Python 2to3, 조건부로리스트 반복 (필터 대리스트 이해)
원래 라인은 다음과 같습니다
for r in filter(lambda r: r.dir == direction, hm_regions):
... # do stuff with r
hm_regions
는 속성이 dir
라고 나는 반복이 루프를 사용하여이 namedtuples
보유를 주어진 방향 매개 변수와 일치하는 것보다
제안 된 변화는 내가 이론적으로 결과가 전혀 변경하지 않아야하므로이 본질적으로 같은 일을 이해
for r in [r for r in hm_regions if r.dir == direction]:
입니다 (시도하지 않은). 그러나 double for
루프가 매우 추한 것을 알았습니다. 그리고이 반복을 수행하는 가장 예쁜, 가장 우아한 방법은 아닌 것 같습니다.
나는 또한 for r in hm_regions if r.dir == direction:
을 시도해 보았습니다.이 오류는 구문 오류로 인해 실패했습니다. 이것은 다소 불만이었습니다.
편집 : 또 다른 질문은 전혀 변경하지 않는 것입니까? 제안 된 변경에 대한 근본적인 동기는 filter
이 더 이상 목록을 반환하지 않는다는 것입니다. 그러나이 맥락에서 나는 그것을 반복하는 것 이상으로 목록을 사용하지 않는다. 따라서 그것은 잘 작동 할 것입니다, 그렇죠?
필터링 속도가 느립니다. [이 링크] (http://stackoverflow.com/questions/3013449/list-filtering-list-comprehension-vs-lambda-filter)를 참조하십시오. – chrislessard