2016-09-20 13 views
-2

リスト内のすべての数値がパラメータと等しくない関数を記述しようとしています。私が持っているコードは動作しません。リストにパラメータと同じでない数値を追加するにはどうすればよいですか?

def suminout(nums,a,b): 
    total=0 
    for i in range(len(nums)): 
     if nums[i]!=a or nums[i]!=b: 
      total=total+nums[i] 
    return total 

リストのすべてを合計しているようです。

例えば

、私が呼ばれた場合:それはしかし7を返す必要があります suminout([1,2,3,4]、1,2) は、私が10

任意の考えを取得していますか?

+5

あなたは代わりに '' or'のand'必要です。それとも、 'sum(私は{a、b}にいなければnumでiのためにiをしてください。 ' – Kasramvd

+0

@ Kasramvdあなたはaとbをタプルではなくdictに入れることを意味すると思います。つまり、コードに構文エラーが追加されています。 – euphoria83

+1

@ euphoria83 '{a、b}'は[セット]です(https://docs.python.org/3.4/library/stdtypes.html#set-types-set-frozenset) –

答えて

0

あなたはandの代わりorを使用する必要があります。

def suminout(nums,a,b): 
    total=0 
    for i in range(len(nums)): 
     if nums[i]!=a and nums[i]!=b: 
      total=total+nums[i] 
    return total 

あなたfor論理はさらにとして(len()range()を使用せずに)簡単にすることができます。

for num in nums: 
    if num not in [a, b]: # same as: num != a and num != b 
     total += num # same as: total = total + num 

ショーンで述べたようにsum()list comprehensionを使用して、それを達成するためのより良い方法を。

>>> my_list = [1, 2, 3, 4] 
>>> sum(filter(lambda x: x !=1 and x!=4, my_list)) 
5 
1

Kasramvdも同様に注意してください。結合が必要ではありません。

ここでは、同じことを行うリストの理解です。

def suminout(nums, a, b): 
    total = 0 
    total = sum([x for x in nums if (x!=a and x!=b)]) 
    return total 
+1

あなたは 'total =あなたのコードで0を返します。 –

+0

@MoinuddinQuadri私は認識しています。それはOPの質問に似ています。 – seanmus

+0

類似のコードを維持しているとは思いません。そうだった場合、あなたは 'sum()'を使用しておらず、エラーだけを指摘していました。私は同意すると、 'sum()'がこの結果を達成するより良い方法です。それを使用している場合、 'total = 0'は必要ありません。それが私の指摘でした。 –

0

または::ORあなたが代わりにリストの内包のfilter()を使用することができ

def suminout(nums, a, b): 
    total = 0 
    total = sum([x for x in nums if x not in (a,b)]) 
    return total 
関連する問題