2016-09-22 2 views
0

아주 쉬운 문제이지만, for 루프를 사용하여 여러 변수를 반복적으로 연습하고 있습니다. 아래에서 새로운 목록을 반환하려고합니다. 여기서 x는 양수의 수이고 y는 입력 배열의 음수의 합입니다. arr.긍정적 인 계산 // 네거티브 합

입력 배열이 비어 있거나 null 인 경우 반환해야합니다. 하늘의 배열

다음은 내가 갖고있는 것입니다!

def count_positives_sum_negatives(arr): 
    return [] if not arr else [(count(x), sum(y)) for x, y in arr] 

현재 수신

...

형식 오류는 'INT'객체는

+0

TypeError 외에도 x가 양수이고 y가 음수 인 조건을 삽입 할 위치를 알 수 없습니다. –

+0

arr의 예를 들어 주시겠습니까? –

+0

@picmate arr = [1,2,3,4,5,6,7,8,9,10, -11, -12, -13, -14, -15] –

답변

1

단순히

>>> arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, -11, -12, -13, -14, -15] 
>>> sum(1 for x in arr if x > 0) 
10 
>>> sum(x for x in arr if x < 0) 
-65 
+0

하지만 두 변수를 모두 고려하여 하나의 새 목록을 반환하는 방법은 무엇입니까? –

+0

글쎄, 로컬 변수 c, s에 할당 한 다음 [C, s]를 반환하십시오 – wim

1

WIM의 방법은 좋은입니다 sum 이해를 사용하여 반복 가능한 없습니다. 농담이 이런 종류의 일에도 좋습니다.

import numpy as np 
arr = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, -11, -12, -13, -14, -15]) 
print([arr[arr >= 0].size, arr[arr < 0].sum()]) 
>> [10, -65] 
1

당신이 얻을 오류가 arr 2 개 요소 (또는 비슷한 용기)의 튜플의 목록이 될 것으로 예상된다 것을 의미하는이 부분 for x,y in arr에서입니다, 같은 예를 들어이하지만 당신이 가진 것은 목록입니다 [(1,2), (5,7), (7,9)] ...

이제 희망 결과를 얻으려면 wim의 솔루션을 사용할 수 있습니다. 목록을 두 번 반복해야하거나 한 번에 가져올 수 있습니다.

>>> def fun(iterable): 
     if not iterable: 
      return [] 
     pos = 0 
     neg = 0 
     for n in iterable: 
      if n>=0: 
       pos = pos + 1 
      else: 
       neg = neg + n 
     return [pos, neg] 

>>> arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, -11, -12, -13, -14, -15] 
>>> fun(arr) 
[10, -65] 
>>> 
+0

나는 이것을 많이 좋아합니다, 둘 다 감사합니다! 다른 입력 테스트를 수용하기 위해 만든 한 가지 수정은 7 번째 줄을 변경하는 것입니다.이 문제는 0을 비양 정적으로 처리하는 것처럼 보입니다. –

관련 문제