非重复int的Python总和

时间:2013-10-04 03:35:47

标签: python if-statement sum unique

我给了3个int,a,b,c。如果它们是唯一的,我想找到所有三个int的总和。如果a,b或c具有与任何其他值相同的值,则它们不计入总和。

示例1:

a = 3, b = 3, c =3
sum = 0

示例2

a = 1, b = 3, c =3
sum = 1

这就是我所做的。如果没有那么多if else语句,是否有更多的pythonic方法呢?

def lone_sum(a, b, c):
    if a != b and b != c and a != c:
        return a + b + c

    elif a == b == c:
        return 0

    elif a == b:
        return c

    elif b == c:
        return a

    elif a == c:
        return b

3 个答案:

答案 0 :(得分:4)

from collections import Counter
def lone_sum(a, b, c):
    d = Counter([a, b, c])
    return sum(k for k in d if d[k]==1)

添加任意数量的数字:

def lone_sum(*L):
  d = Counter(L)
  return sum(k for k in d if d[k]==1)

添加完全重复c次的数字:

def rep_sum(c, *L):
  d = Counter(L)
  return sum(k for k in d if d[k]==c)

添加最多c次重复的数字:

def rep_sum(c, *L):
  d = Counter(L)
  return sum(k for k in d if d[k]<=c)

...或者如果你感到无聊并希望变得非常有创意:

def lone_sum(*L):
  nums = set()
  all_nums = set()
  for num in L:
    if num in nums:
      nums.remove(num)
    elif num not in all_nums:
      all_nums.add(num)
      nums.add(num)
  return sum(nums)

答案 1 :(得分:3)

这是一个很好的初学者解决方法

def lone_sum(*args):
    return sum(x for x in args if args.count(x) == 1)

这个问题是args.count是隐藏循环,因此计算变为O(n 2

如果只有3个参数 - 即n == 3。

,这并不重要

编写相同内容的简便方法是

def lone_sum(a, b, c):
    args = (a, b, c)
    s = 0
    for x in args:
        if args.count(x) == 1:
            s += x
    return s

答案 2 :(得分:1)

在此,我会列出您的号码,并将其称为x,然后仅选择x[i]列表中不存在x的{​​{1}} x[i] 。也就是说,它会删除所有有重复的数字。

def lone_sum(a, b, c):
    x = [a,b,c]
    x = [x[i] for i in range(len(x)) if x[i] not in [x[j] for j in range(len(x)) if j!=i]]
    return sum(x)

所以,

[x[j] for j in range(len(x)) if j!=i]

基本上是排除x[i]的元素列表。它需要除i之外的所有元素。如果x[i]在此列表中,则表示它是重复的,我们需要将其删除。也就是说,

x[i] not in [x[j] for j in range(len(x)) if j!=i]