2016-09-22 16 views
0

かなり簡単な問題ですが、私はまだforループを使って複数の変数を繰り返し練習しています。以下では、新しいリストを返すよう努めています。ここで、xは正の数です.yは入力配列からの負の数の和です。arr.正の数//負の合計

入力配列が空またはnullの場合は、空の配列

ここには何がありますか?現在...

はTypeError受け

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

単に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

ですが、両方の変数を考慮して1つの新しいリストを返すにはどうすればよいですか? –

+0

さて、ローカル変数c、sに代入してから[C、s]を返してください – wim

1

WIMの方法が良いです使用反復可能ではありません。ナンシーはこれらのタイプのものにも適しています。

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のソリューションを使用すると、リストを2回繰り返したり、一度に取得することができます

>>> 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を非陽性として扱っているようです。 –

関連する問題