2013-02-25 2 views
1

나는 질문을 알아 내려고하고 있는데 혼란스러워진다. 기본적으로 나는 목록을 가지고 있고 그것은 은행 성명서를 대표하기로되어있다. 나는 철회를 대표하기로되어있는 음수가 함께 더 해지고 양수가 합산되어 예금을 나타낼 수 있도록 목록을 함께 추가하려고합니다. 지금까지 나는함께 목록을 추가하는 방법

def statement(l): 
    deposit = 0 
    withdrawl = 0 
    for a in l: 
     a = sum(l) 
    for b in l: 
     if b == -b: 
      b = sum(b)   
    return [a,-b] 

있어하지만 난 statement([30.95,-15.67,45.56,-55.00,43.78]) 을 수행 할 때 그것은 [49.620000000000005, -43.78] 이이 [120.29,-70.67] 누군가가 도움을 줄 수 반환 가정 할 때 반환?

감사합니다.

답변

8

다음은 그것을 할 것으로 보인다 :

In [1]: def statement(l): 
    ...:  pos, neg = 0, 0 
    ...:  for a in l: 
    ...:   if a > 0: pos += a 
    ...:   else: neg += a 
    ...:  return pos, neg 
    ...: 

In [2]: statement([30.95,-15.67,45.56,-55.00,43.78]) 
Out[2]: (120.29, -70.67) 

그것은 오히려 list보다 tuple를 반환, 길이가 고정으로 더 논리적 보인다. 많은 이해가되지 않습니다 len(l) 시간을 계산하고

for a in l: 
    a = sum(l) 

l의 모든 요소의 합으로 이어질 것입니다 :


는 여기에 귀하의 시도에 대한 의견의 몇입니다. 합계를 얻으려면 a = sum(l)을 한 번만 입력하십시오.

if b == -b:

- 숫자가 음수이면 아마 당신은이 검사를 기대하지만, b 0 인 경우 제로 그래서 유일한 xx == -x 때문에 실제로는, 확인합니다. 너는 if b < 0:을 원한다.


나는 대답이 빨리 CPython의 3.3 인 점검하고, 당연히이 사람은 약 2 배 빠른 주어진 예에 있습니다 : 2.3 us per loop5.98 us per loop 대.

+0

멋진 답변 Lev. –

+0

이것은 시퀀스를 한 번 통과시키는 장점이 있습니다. 나는이 응답과'sum()'에 대한 두 번의 호출을 통해 시간을 잰 것으로이 대답은 더 빠릅니다. – steveha

+0

@steveha CPython에서도 편집 내용이 표시됩니다. –

4

이것은 당신이 원하는 일을해야합니다

def statement(l): 
    pos = sum(i for i in l if i > 0) 
    neg = sum(i for i in l if i < 0) 
    return pos, neg 

귀하의 실수는 당신이 변수를 반복하는 할당하려고한다는 것입니다. 값을 누적하려는 경우 for 루프 외부에서 0으로 정의한 다음 각 단계에서 추가하십시오. 루프의 끝에서

al의 모든 요소의 합을 포함하고, (당신이있어 결과를 설명하는) 최종 검사가 항상 실패하고 b 덮어 적이 없기 때문에 bl의 마지막 요소가 포함 .

+0

좋은 대답, 자신의 오류도 설명해주십시오 –

+1

이것은 좋지만 반복기에서는 작동하지 않으며 목록보다 약 2 배 느립니다 :) 아마도이 경우 문제는 아닙니다. –

+0

도 쉽게 혼동 될 수 있으므로 매개 변수로 사용해서는 안됩니다. –

관련 문제