用于连续汇总列表中值的Python脚本

时间:2017-11-11 06:33:06

标签: python list

我正在尝试创建一个“add”函数,它能够连续对列表元素求和并返回一个新的sum列表。在python中可能存在输入不是列表的情况,或者其中有其他对象而不是字符串字符或浮点数等整数,在这些情况下我必须返回“无效输入”

例如:

x

我该怎么做?

7 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

这有两个层次。

  1. 查看列表中的元素是否全部为int

    >>> all(isinstance(ele , int) for ele in l)
    

    如果false打印无效;否则继续计算。

    1. 给出前面元素的累积总和:

      >>> [sum( l[:i+1] ) for i in range(len(l))]
      
    2. #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