第一个负数后的随机列表数字总和
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
函数,这绝对是正确和最好的方法。
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
函数,这绝对是正确和最好的方法。