[英]Sum of random list numbers after 1st negative number
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)
我需要计算这个随机列表中第一个负数之后的数字总和,它是在第二个 function 中完成的,但想知道有没有办法不使用sum()
function?
尝试这个:
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:]))
首先生成列表lst
。 然后,您遍历您的列表,并使用next(i for i, n in enumerate(lst) if n < 0)
找到第一个负元素。 最后,您计算您感兴趣的列表部分的总和。
如果您真的不想使用sum
但要保持简洁(并且您使用的是 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])
显式使用迭代器使其更好、更高效:
def counterlist(lst):
it = iter(lst)
for i in it:
if i < 0:
print('Reqemlerin cemi:', sum(it))
不知道为什么你不想使用sum
function,这绝对是正确和最好的方法。
首先不要使用list
作为变量名,它是一个保留关键字。 其次,使您的循环如下:
for index, x in enumerate(list_):
if x < 0:
sum_ = sum(list_[(index + 1):])
print('Reqemlerin cemi:', sum_)
break
这样,您不需要找到值。
最后,如果您不想使用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_)
假设列表中有一个负值,并且有一个测试列表“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):])
按预期计算为 34。 如果没有负值,也可以添加一个带有简单总和的 try/except IndexError 来捕获。
编辑:更新了搜索的索引。
是的,您可以遍历列表的元素并继续将它们添加到一些可以存储您的结果的 var 中。 但是为了什么? sum
方法更加清晰和python-ish。
另外,不要使用list
作为列表名称,它是一个保留字。
# 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
不如标记的答案,但只是知道如何使用 numpy,确保列表中有一个负数。
示例列表: lst = [12, 2, -3, 4, 5, 10, 100]
您可以使用np.cumsum
获得结果:
import numpy as np
np_lst = np.array(lst)
cum_sum = np.cumsum(np_lst)
res = cum_sum[-1] - cum_sum[np_lst<0][0]
res #=> 119
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.