I am kind of new to python lists
def sum_fractions(lst): for i in range(len(lst)): i+=1 s=lst[i][0]/lst[i][1]+lst[i][0]/lst[i][1] ss=round(s) return ss sum_fractions([[11, 2], [3, 4], [5, 4], [21, 11], [12, 6]])
the desired result should be like this
sum_fractions([[11, 2], [3, 4], [5, 4], [21, 11], [12, 6]]) ➞ 11
error: list index out of range actually, I have to go through all lists in a 2d list and first divide the first element of the list with the second and then add it to the fraction of another lists
Advertisement
Answer
Your current code implementation has several problems:
- You haven’t initialized
ss
to 0 - You don’t need to increment
i
inside the loop again.range(len(lst)
does this for internally. - You don’t need to round at each iteration if you want the output to be
11
. Useround
only while returning the output. - Additionally, it is not clear why you are adding the fractions twice.
The correct implementation would be:
def sum_fractions(lst): ss = 0 for i in range(len(lst)): s=lst[i][0]/lst[i][1] ss+=s return round(ss) lst = [[11, 2], [3, 4], [5, 4], [21, 11], [12, 6]] res = sum_fractions(lst) print(res)
As suggested by others, you can modify the function to directly iterate over elements and not index.
def sum_fractions_0(lst): ss = 0 for l in lst: ss += l[0]/l[1] return round(ss)