Reputation: 186
I'm trying to make a program that calculates the different sums that can be generated with the given integers. I'm not quite getting the hang of things, and I don't really understand where and what to edit in the code.
I'm trying to follow the following rule (examples)
list [1,2,3] has 6 possible sums: 1, 2, 3, 4, 5 and 6
list [2,2,3] has 5 possible sums: 2, 3, 4, 5 and 7
list2 = [2, 2, 3]
def sums(list2):
if len(list2) == 1:
return [list2[0]]
else:
new_list = []
for x in sums(list2[1:]):
new_list.append(x)
new_list.append(x + list2[0])
return new_list
print(sums(list2))
In the current code I'm struggling on getting the single integers (2, 3) and removing the duplicates. Help would be appreciated.
Upvotes: 0
Views: 68
Reputation: 13929
There are mainly two things you might want to modify: (i) add the case where you append list2[0]
itself, and (ii) use set
to take unique numbers:
def sums(list2):
if len(list2) == 1:
return {list2[0]}
else:
new_list = [list2[0]] # NOTE THAT THIS LINE HAS BEEN CHANGED
for x in sums(list2[1:]):
new_list.append(x)
new_list.append(x + list2[0])
return set(new_list)
print(sums([1,2,3])) # {1, 2, 3, 4, 5, 6}
print(sums([2,2,3])) # {2, 3, 4, 5, 7}
Alternatively, using union operator |
:
def sums(lst):
if not lst:
return set()
sums_recurse = sums(lst[1:])
return {lst[0]} | sums_recurse | {lst[0] + x for x in sums_recurse}
Upvotes: 1