Summing first 2 elements in a Python list when the length of the list is unknown
Solution 1
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
Solution 2
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.
Solution 3
try this:
def sum2(nums):
if len(nums) == 1:
return nums[0]
else:
return sum(nums [:2])
MyCarta
I am a Geophysicists from Canada (I grew up in Italy). I have a Honors degree in Geology from the University of Rome, Italy, and a Masters degree in Geophysics from the University of Calgary, Alberta. I am also a would-be data scientist, blogger, and independent researcher through my own company, MyCarta, which is involved in visualization and digital mapping of geoscience data. I like to explore methods from other disciplines (at the top of the list medical and forensic image analysis) and adapt them to geo-data. I like Python.
Updated on June 18, 2022Comments
-
MyCarta almost 2 years
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.
-
jonrsharpe almost 10 years
return sum(nums[:2])
? -
MyCarta almost 10 years+1 as it is same solution as answer accepted
-
-
jonrsharpe almost 10 yearsThose aren't "ranges", they're "slices".
-
Roman Bodnarchuk almost 10 years@jonrsharpe That is true, was remembering the right term.
-
jonrsharpe almost 10 yearsBetter to use
except IndexError
- a "naked"except
can catch all kinds of other things (e.g. aTypeError
becausenums
can't be indexed at all or doesn't only contain numbers). -
MyCarta almost 10 yearswhy do I have to wait 10 minutes to accept the answer?
-
wnnmaw almost 10 years@MyCarta to make sure you have time to review all the answers that pop up in that time
-
MyCarta almost 10 yearsCannot use it because the exercise is structured so that I have to use sum but very interesting, did not know anything exceptions, thank you.
-
MyCarta almost 10 yearsOK, thank you for the clarification. That makes sense.
-
jonrsharpe almost 10 years@MyCarta your first answer wasn't using
sum
! EAFP is a common Python coding style, worth being aware of. -
MyCarta almost 10 yearsOK I tried the code suggested by @TheSoundDefense and it works. Really interesting and I agree worth learning. I could've choosen either answer.