Python sum of non duplicate int

Question:

I am given 3 int, a, b, c. I would like to find the sum of all three int provided that they are unique. If a, b, or c has the same values as any of the other values, then they don’t count towards the sum.

Example 1:

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

Example 2

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

This is what I have done. Is there a more pythonic way of doing this without so many if else statements?

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
Asked By: Cryssie

||

Answers:

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)

Add any number of numbers:

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

Add numbers repeated exactly c times:

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

Add numbers repeated at most c times:

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

… or if you’re bored and want to get really creative:

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)
Answered By: inspectorG4dget

Here I take a list of your numbers, call it x, and then select only those x[i] which are not present in a list which is x without x[i]. That is, it removes all numbers which have a duplicate.

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)

So,

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

is basically a list of elements excluding x[i]. It takes all elements apart from ith. If x[i] is in this list, it means it is a duplicate and we need to remove it. That is,

x[i] not in [x[j] for j in range(len(x)) if j!=i]
Answered By: sashkello

Here is a good beginners way to solve it

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

The issue with this is that args.count is a hidden loop, so the calculation becomes O(n2)

This doesn’t matter much if there are only ever 3 arguments – ie n == 3.

A longhand way to write the same thing is

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
Answered By: John La Rooy

I think a lot has already been said and done on this topic and there is not much that can be added. But I too have written a program that uses sets to go about this task which is a little different from the top answer. So if you still wish to see all possible programs then here you go. Hope it helps!

def lone_sum(x):
    c = set(x)
    for b in c:
        x.remove(b)
    for a in set(x):
        if a in c:
            c.remove(a)
    return(sum(c))
Answered By: Poke_Programmer
Categories: questions Tags: , , ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.