Home > Software engineering >  Sum of random list numbers after 1st negative number in Python
Sum of random list numbers after 1st negative number in Python

Time:01-04

import random

def mainlist(list, size, min, max):
    for i in range(size):
        list.append(random.randint(min, max))
    print(list)

def counterlist(list):
    for i in list:
        if i<0:
            x=sum(list[(list.index(i) 1):])
            print('Reqemlerin cemi:', x)
            break
       
     
list = []
mainlist(list, 10, -10, 30)
counterlist(list)

I need to calculate sum of numbers after 1st negative number in this random list, did it in second function but want to know is there way not using the sum() function?

Thank you in advance.

CodePudding user response:

First of all don't use list as a variable name, it's a reserved keyword. Secondly, make your loop as follows:

for index, x in enumerate(list_):
    if x < 0:
        sum_ = sum(list_[(index   1):])
        print('Reqemlerin cemi:', sum_)
        break

That way, you don't need to find a value.

At last if you don't want to use sum

found_negative = false
sum _ = 0
for x in list_:
    if found_negative:
        sum_  = x
    elif x < 0:
        found_negative = true
        
print('Reqemlerin cemi:', sum_)

CodePudding user response:

Assuming there's a negative value in the list, and with a test list "a":

a = [1,2,3,-7,2,3,4,-1,23,3]
sum(a[(a.index([i for i in a if i < 0][0])   1):])

Evaluates to 34 as expected. Could also add a try/except IndexError with a simple sum to catch if there's no negative value.

Edit: updated the index for the search.

CodePudding user response:

Yes, you can iterate over the elements of the list and keep adding them to some var which would store your result. But what for? sum approach is much more clear and python-ish.

Also, don't use list as a list name, it's a reserved word.

# After you find a first negative number (at i position)
j = i   1
elements_sum = 0
while j < len(list):
    elements_sum  = list[j]
    j  = 1

CodePudding user response:

Try this:

import random

lst = [random.randint(-10, 30) for _ in range(10)]
print(sum(lst[next(i for i, n in enumerate(lst) if n < 0)   1:]))

First you generate the list lst. Then, you iterate over your list and you find the first negative element with next(i for i, n in enumerate(lst) if n < 0). Finally, you compute the sum of the portion of the list you're interested about.

If you really don't want to use sum but keep things concise (and you're using python >= 3.8):

import random

lst = [random.randint(-10, 30) for _ in range(10)]
s = 0
print([s := s   x for x in lst[next(i for i, n in enumerate(lst) if n < 0)   1:]][-1])
  • Related