繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM