[英]Python script for summing values in list continuously
我正在尝试使函数“ add”能够连续对列表的元素求和并返回新的和列表。 在python中,有时输入不是列表,或者其中有其他对象而不是整数,例如字符串或浮点数,在这种情况下,我必须返回“无效输入”
例如:
add([1,2,3,4,5]) == [1, 3, 6, 10, 15] , because it's calculated like this : [1, 1 + 2, 1 + 2 + 3, 1 + 2 + 3 + 4, 1 + 2 + 3 + 4 + 5]
add([1,'a',2,'b',3,'c']) == 'Invalid input'
add('All string') == 'Invalid input'
add((1,2,3,4)) == 'Invalid input'
我该怎么做?
numpy cumsum可能最适合您要查找的内容:
import numpy
data = numpy.array([ndx**2 for ndx in range(10)])
numpy.cumsum(data)
array([ 0, 1, 5, 14, 30, 55, 91, 140, 204, 285])
这有两个层次。
查找列表中的元素是否全部为int
:
>>> all(isinstance(ele , int) for ele in l)
如果false
: 打印无效 ; 否则继续进行计算。
给出先前元素的累积总和:
>>> [sum( l[:i+1] ) for i in range(len(l))]
#driver值:
IN : l = [1,2,3,4,5]
OUT : True #all ints
[1, 3, 6, 10, 15]
IN : l = [1,'a',2,'b',3,'c']
OUT : False #not int
Invalid input
或者,遵循try/except
方法的更简单方法:
try :
print([sum( l[:i+1] ) for i in range(len(l))])
except :
print("Invalid Input")
使用itertools.accumulate
来获取总和,后跟any(isinstance(i,str) for i in list)
以验证是否有任何元素为字符串
from itertools import accumulate
l1 = [1,2,3,4,5]
print ("Invalid input" if any(isinstance(i, str) for i in l1) else list(accumulate(l1)))
#[1, 3, 6, 10, 15]
l2 = [1,2,3,'str',5]
print ("Invalid input" if any(isinstance(i, str) for i in l2) else list(accumulate(l2)))
#Invalid input
放入功能:
def cumsum(l):
if any(isinstance(i, str) for i in l):
print ('Invalid input')
else:
print (list(accumulate(l1)))
cumsum([1,2,3,4,5])
#[1, 3, 6, 10, 15]
cumsum([1,2,3,'str',5])
#Invalid input
def add_up(nums):
if any(not isinstance(n, int) for n in nums):
return 'Invalid input'
def gen():
n = nums[0]
yield n
for i in nums[1:]:
n = i + n
yield n
return list(gen())
结果
add_up([1,2,3,4,5]) [1, 3, 6, 10, 15] add_up([1,'a',2,'b',3,'c']) 'Invalid input' add_up('All string') 'Invalid input' add_up(['a','b','c']) 'Invalid input' add_up(range(10)) [0, 1, 3, 6, 10, 15, 21, 28, 36, 45]
我们可以使用numpy cumsum来获取累积值列表。
import numpy as np
def cumSum(arr):
try:
return (list(np.cumsum(arr)))
except:
return "inValid"
a = [1,2,3,4,5]
print(cumSum(a))
上面的代码片段输出是
[1, 3, 6, 10, 15]
from itertools import accumulate
def add(input):
if all(isinstance(i,int) for i in input):
return list(accumulate(input))
else:
return "invalid input"
这是仅汇总有效int或float列表的方法
def add(lis):
if not isIntList(lis) or type(lis) is not list:
return False
return [sum(lis[:x+1]) for x in range(len(lis))]
该方法检查列表中的值是int还是float值
def isIntList(list):
for i in list:
if not isinstance(i, int) and not isinstance(i, float):
return False
return True
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.