total = 0
for i in range(0, some upper bound):
total += i
죄송합니다. 기본 사항이지만 이것들이 많으며 편안함보다 많은 공간을 차지하고 있습니다.Python에서 숫자의 산술 시퀀스를 더 빨리 요약하는 방법이 있습니까?
total = 0
for i in range(0, some upper bound):
total += i
죄송합니다. 기본 사항이지만 이것들이 많으며 편안함보다 많은 공간을 차지하고 있습니다.Python에서 숫자의 산술 시퀀스를 더 빨리 요약하는 방법이 있습니까?
total = sum(range(upper))
또는
total = upper * (upper - 1)/2
첫번째 파이썬이고, 두번째 가우스.
편집 : 0부터 시작하지 않는 경우 : 다시 가우스에 따라,
total = sum(range(lower, upper))
하거나, lower
위해 동일을 upper
와 동일한 작업을 수행하고 빼지 : 파이썬에있는 경우
total = upper * (upper - 1)/2 - lower * (lower - 1)/2
2.x이면 range
을 xrange
으로 바꿉니다.
모든 추가를 건너 뛸 수있는 수식은 +1입니다. – kindall
위대한 작품! 고맙습니다. 0에서 시작하지 않는 상황의 경우 합계 (범위 (아래, 위))를 수행합니까? – MyNameIsKhan
나중에 사용하는 경우 iterables 대신 항상 generator를 사용해야합니다. 이 경우'range' 대신'xrange'를 사용해야합니다. – schlamar
total = some_upper_bound * (some_upper_bound -1)/2
lower_bound != 0
경우 :
total = (some_upper_bound - lower_bound) * (some_upper_bound + lower_bound - 1)/2
업데이트 : 그것은 허용 대답의 일부의 정확한 복사본이 거의 그대로 내가 독립적으로 대답하지만 나는 (내 대답을 삭제 한 것). 그러나 대답은 lower_bound
이 포함될 때 매우 작지만 이론적으로 흥미로운 향상입니다. 내 대답에는 두 개의 곱셈/나누기 (더하기/빼기보다 상대적으로 더 비쌉니다)가 포함되어 있고 다른 대답에는 4가 포함되어 있습니다.
eumiro에서 확장하십시오. 명확성을 위해 Gauss 메서드를 캡슐화하는 메서드를 작성하려고 할 수 있습니다. (I 파이썬 구문을 모르기 때문에 그루비로 작성) I는 다음과 같이 제안 :
public int sumUpToBoundary(def upper_bound){
return (upper_bound) * (upper_bound - 1)/2;
}
public int sumBetween(def lower_bound, def upper_bound){
return sumUpToBoundary(upper_bound) - sumUpToBoundary(lower_bound);
}
public void someOtherMethod() {
int total = sumUpToBoundary(some_upper_bound);
int total2 = sumBetween(some_lower_bound, some_upper_bound);
}
UPDATE : @mspy 내 메소드 서명 파이썬의 스타일에없는 것을 지적했다. 이 예제를 좀 더 파이썬과 비슷한 구문을 지원하는 Groovy로 업데이트했습니다.
더 빠르고 짧은 코드를 원하십니까? – dbf
더 짧고 이상적! 단점이 있습니까? – MyNameIsKhan
예,'sum'을 사용하는 솔루션이 더 읽기 쉽고 'Gauss' 기능이 더 빠릅니다. – schlamar