2016-09-22 81 views
0

一個相當簡單的問題,但我仍在練習迭代多個變量與for循環。在下面,我試圖返回一個新的列表,其中x是正數的個數,y是來自輸入數組的負數的總和arr.正數//負數

如果輸入數組爲空或空,我將返回一個空陣列。

這是我得到的!

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

目前正在接受......

類型錯誤: '詮釋' 對象不是可迭代

+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

只需使用一個sum理解

>>> 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,然後返回[c,s] – wim

1

WIM的方法是很好的。 Numpy也適用於這些類型的東西。

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

你的錯誤是從該部分for x,y in arr這意味着arr預計將在2個元素(或任何類似容器)的元組的列表,例如像這樣[(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視爲非正面。 –