我给了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
答案 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]