나는 종종 자신과 같은 비효율적 인 루프를하고있다 찾을입니다. 그건 그렇고, 이것은 덧셈 연산자가 비슷한 인덱스의 값을 (1, 2, 3) + (4, 5, 6, 7) == (5, 7, 9, 7)
처럼 추가하는 터플의 하위 클래스입니다. 나는 filter()
이 나를 도와 줄 것이라고 생각 하겠지만 어떻게 구현할 지 확신하지 못합니다.내가 지능형리스트로이 바꿀 수있는 방법이
편집 : 이것은 파이썬 3
나는 종종 자신과 같은 비효율적 인 루프를하고있다 찾을입니다. 그건 그렇고, 이것은 덧셈 연산자가 비슷한 인덱스의 값을 (1, 2, 3) + (4, 5, 6, 7) == (5, 7, 9, 7)
처럼 추가하는 터플의 하위 클래스입니다. 나는 filter()
이 나를 도와 줄 것이라고 생각 하겠지만 어떻게 구현할 지 확신하지 못합니다.내가 지능형리스트로이 바꿀 수있는 방법이
편집 : 이것은 파이썬 3
이 작업을 수행하는 가장 간결한 방법은
map(sum, itertools.izip_longest(self, other, fillvalue=0))
또는
itertools.starmap(operator.add,
itertools.izip_longest(self, other, fillvalue=0))
이 내가 원래 코드가 어떻게해야 추측 무엇을 수행한다. 파이썬 3을 사용한다면 결과를 터플이나리스트 또는 원하는 것으로 변환하십시오.
한편, 짧고 간단한 진술을 사용하면 명확 해집니다! –
저는 파이썬 3 인터프리터를 가지고 있지 않습니다. 파이썬 3에 있나요? 문서에서 빨리 검색 한 후에 찾을 수 없습니다. –
@TylerCrompton : ['izip_longest'] (http://docs.python.org/library/itertools.html#itertools.izip_longest)는 Python 2.6에서 소개되었습니다. 어떤 버전을 사용하고 있습니까? –
위한 방법에 대한이 검증되지 않은 비록 :
dimensions = [sum(map(lambda x: ((x is None) and 1 or 2) - 1, (self[i] if i < self.numberOfDimensions else None, other[i] if i < other.numberOfDimensions else None))) for i in range(max(self.numberOfDimensions, other.numberOfDimensions))]
꽤 추한 이럴 비록 여기에 지능형리스트를 사용하는 사소한 방법이 있습니다.
dimensions = [
sum(map(lambda x: ((x is None) and 1 or 2) - 1, (
self[i] if i<self.numberOfDimensions else None,
other[i] if i<other.numberOfDimensions else None
)))
for i in range(max(self.numberOfDimensions, other.numberOfDimensions))
]
실제로 "해독 가능성이 계산됩니다." 나는 그것이 추악한 데 동의한다. –
Python 3 사용. –
@TylerCrompton이 2.6 이상에서 작동해야합니까? –
나는 완전히 그것을 얻고 있는지 확실하지 않습니다,하지만 난 다음 stdlib가 당신의 친구입니다 생각 :
from itertools import izip_longest
dimensions = []
for a, b in izip_longest(self, other, fillvalue=0):
dimensions.append(a + b)
내가 지능형리스트는 매우 깨끗하다고 생각하지 않습니다.
나는 그것이 원래 코드가하는 것은 아니지만 이것은 OP가 원하는 것이라고 생각합니다. –
저는 파이썬 3 인터프리터를 가지고 있지 않습니다. 파이썬 3에 있나요? 문서에서 빨리 검색 한 후에 찾을 수 없습니다. –
제 대답은 2.7이었습니다. python3에서도 ['itertools.zip_longest()'] (http://docs.python.org/py3k/library/itertools.html#itertools.zip_longest)입니다. 호기심에 대한 [2.7 용 문서] (http://docs.python.org/library/itertools.html#itertools.izip_longest)는 다음과 같습니다. – AdamKG
나는 당신이 필요로하는 누락 된 부분이 생각 : 물론
(a,b) = (self[i] if i < self.numberOfDimensions else None, other[i] if i < other.numberOfDimensions else None)
, 나는 하나의 표현이 더 읽기 될 것이라고 확신 아니에요. 어떤 종류의지도를 사용하여 (a,b)
을 먼저 생성하는 것이 더 나을 것입니다.
'dimensions.append (sum map (람다 x : (x는 없음)과 1 또는 2) - 1, (a, b)))')'당신이 생각하는 바가 무엇입니까? 이것은 dimension.append (a는 None + b가 None이 아닌)를 작성하는 다소 이상한 방법입니다. 이것은 이미 이상합니다. –
빠른 확인, 조기 최적화 중입니까? 여러분과 다른 사람들이 이것을 위해 루프를 이해하는 것은 쉽습니다. 실제로 프로그램에서 큰 속도 저하를 일으키는 지, 그렇다면 상관합니까? 런타임이 50 나노 세컨드에서 150 나노 세컨드로 세 배가된다면주의를 기울이지도 않을 것입니다. –
@SpencerRathbun :이 코드를 이해하는 것은 분명히 * 쉽지는 않습니다. 여러 가지 다양한 일을하는 답을 보여줍니다. –