2016-09-20 75 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 

它似乎总结列表中的所有内容。

例如,如果我叫: suminout([1,2,3,4],1,2) 它应该返回7。但是,我得到10

有什么想法?

+5

你需要'和',而不是'或'。或者只是'总结(我为我在数字,如果不是我在{a,b})' – Kasramvd

+0

@Kasramvd我想你打算把a和b放在一个元组中,而不是一个字典。这是在你的代码中添加一个语法错误。 – euphoria83

+1

@ euphoria83'{a,b}'是一个[set](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())为:使用与list comprehensionsum()来实现它由肖恩提到

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

更好的方法。或者您可以使用filter()代替列表理解:

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

或者:

def suminout(nums, a, b): 
    total = 0 
    total = sum([x for x in nums if x not in (a,b)]) 
    return total 
相关问题