第一个负数后的随机列表数字总和

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)

我需要计算这个随机列表中第一个负数之后的数字总和,这是在第二个函数中完成的,但想知道有没有办法不使用 sum() 函数?

首先不要用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

试试这个:

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

不如标记的答案,但只是想知道如何使用 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

显式使用迭代器使其更好、更高效:

def counterlist(lst):
    it = iter(lst)
    for i in it:
        if i < 0:
            print('Reqemlerin cemi:', sum(it))

不知道为什么您不想使用 sum 函数,这绝对是正确和最好的方法。