2009-05-12 3 views
10

파이썬 라이브러리에서 for 루프보다 숫자 목록을 더 빨리 요약 할 수 있습니까? 아니면 정말로 뭔가 멀티 스레딩/벡터 처리만으로 효율적으로 수행 할 수 있습니까?for 루프보다 숫자 목록을 더 빨리 합산 할 수 있습니까?

편집 : 설명하기 만하면 사용자가 입력 한 숫자가 정렬되지 않은 숫자 목록이 될 수 있습니다.

+1

당신이 정말 "빠른"의미합니까, 또는 당신이 "파이썬"을 뜻을? 숫자 목록을 요약하면 코드에서 병목 현상이 발생하여 최적화가 필요합니까? –

답변

32

sum()을 사용하여 배열의 값을 합할 수 있습니다.

a = [1,9,12] 
print sum(a) 
2

목록의 각 용어는 단순히 1 증가하는 경우, 또는 시리즈의 패턴을 찾을 수 있다면, 당신은 n 개의 용어를 합산위한 공식을 찾을 수 있습니다. 예를 들어, 시리즈의 합계 {1,2,3, ..., N}는 경우 = N (N + 1)/2

here

1

잘 읽기, 나도 몰라 더 빠르지 만 한 번의 조작으로 약간의 미적분을 시도해 볼 수 있습니다. (N * (N + 1))/2는 1에서 N까지의 모든 숫자의 합계를 제공하며 더 복잡한 합계를 푸는 다른 수식이 있습니다.

0

일반적인 목록을 보려면 최소한 for 루프를 수행하는 합계를 얻으려면 적어도 모든 구성원을 한 번 이상 검토해야합니다. 라이브러리 API (예 : 합계)를 사용하는 것이 더 편리하지만 실제로 더 빠를 것이라고는 생각하지 않습니다.

+0

C로 작성 되었기 때문에 sum()은 for 루프보다 빠릅니다. –

+0

@musicfreak : for 루프의 오버 헤드를 피하기 때문에 더 빠릅니다 (변수 할당 및 메소드 호출) – Algorias

+0

그것은 C로 작성 ... 어느 쪽이든 그것은 더 빠릅니다. –

5

루프 시간 목록을 요약하는 또 다른 방법 :

s = reduce(lambda x, y: x + y, l) 
+9

람다 대신 operator.add를 사용해야합니다. 첫 번째 100000 번을 합하면 34ms이고 람다는 19ms이며 operator.add 만 사용합니다. (합계는 15ms에서 모두보다 낫습니다). – Kiv

관련 문제