我正在尝试创建一个“add”函数,它能够连续对列表元素求和并返回一个新的sum列表。在python中可能存在输入不是列表的情况,或者其中有其他对象而不是字符串字符或浮点数等整数,在这些情况下我必须返回“无效输入”
例如:
x
我该怎么做?
答案 0 :(得分:1)
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])
答案 1 :(得分:1)
这有两个层次。
查看列表中的元素是否全部为int
:
>>> all(isinstance(ele , int) for ele in l)
如果false
:打印无效;否则继续计算。
给出前面元素的累积总和:
>>> [sum( l[:i+1] ) for i in range(len(l))]
#driver values:
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")
答案 2 :(得分:1)
使用itertools.accumulate
获取cumsum,然后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
答案 3 :(得分:1)
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]
答案 4 :(得分:0)
我们可以使用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]
答案 5 :(得分:0)
from itertools import accumulate
def add(input):
if all(isinstance(i,int) for i in input):
return list(accumulate(input))
else:
return "invalid input"
答案 6 :(得分:0)
这是仅总结有效的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