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])