I am working on the following Python list exercise from codingbat.com:
Given an array of ints, return the sum of the first 2 elements in the array. If the array length is less than 2, just sum up the elements that exist, returning 0 if the array is length 0. Examples:
sum2([1, 2, 3]) → 3 sum2([1, 1]) → 2 sum2([1, 1, 1, 1]) → 2
My solution below works:
def sum2(nums):
if len(nums)>=2:
return nums[0] + nums[1]
elif len(nums)==1:
return nums[0]
return 0
But I wonder if there's any way to solve the problem with fewer conditional statements.
There is. Two elements of the solution - builtin function sum and lists's slices:
>>> sum([1,2,3][:2])
3
>>> sum([1,1,1,1][:2])
2
>>> sum([1,1][:2])
2
>>> sum([1][:2])
1
>>> sum([][:2])
0
If you can't use sum, one possible solution uses exceptions:
totalsum = 0
try:
totalsum += nums[0]
totalsum += nums[1]
except IndexError:
pass
return totalsum
Catch the error and short-circuit the summation if an element doesn't exist. Easier to ask forgiveness than permission, as they say.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With