编写自定义求和函数,该函数对数字列表求和

时间:2014-04-25 15:09:10

标签: python loops for-loop

我是Python的新手,需要一些帮助来编写一个以列表作为参数的函数。

我希望用户能够输入数字列表(例如,[1,2,3,4,5]),然后让我的程序汇总列表的元素。但是,我想使用for循环对元素求和,而不仅仅是使用内置的sum函数。

我的问题是我不知道如何告诉翻译用户正在输入列表。当我使用这段代码时:

  def sum(list):

它没有用,因为解释器只想要一个取自sum的元素,但我想输入一个列表,而不只是一个元素。我尝试使用list.append(..),但无法按照我想要的方式工作。

感谢您的期待!

编辑:我正在寻找类似的东西(谢谢," irrenhaus"):

def listsum(list):
    ret=0
    for i in list:
        ret += i
    return ret

# The test case:
print listsum([2,3,4])  # Should output 9.

10 个答案:

答案 0 :(得分:3)

我不确定您是如何构建用户输入列表的。"你在使用循环吗?这是一个纯粹的输入?你在读JSON还是泡菜?这是最大的未知数。

让我们说你试图让他们输入逗号分隔值,只是为了得到答案。

# ASSUMING PYTHON3

user_input = input("Enter a list of numbers, comma-separated\n>> ")
user_input_as_list = user_input.split(",")
user_input_as_numbers_in_list = map(float, user_input_as_list) # maybe int?
# This will fail if the user entered any input that ISN'T a number

def sum(lst):
    accumulator = 0
    for element in lst:
        accumulator += element
    return accumulator

前三行有点难看。你可以把它们结合起来:

user_input = map(float, input("Enter a list of numbers, comma-separated\n>> ").split(','))

但那也是丑陋的。怎么样:

raw_in = input("Enter a list of numbers, comma-separated\n>> ").split(',')
try:
    processed_in = map(float, raw_in)
    # if you specifically need this as a list, you'll have to do `list(map(...))`
    # but map objects are iterable so...
except ValueError:
    # not all values were numbers, so handle it

答案 1 :(得分:1)

Python中的for循环非常容易使用。对于您的应用程序,这样的工作:

def listsum(list):
    ret=0
    for i in list:
        ret+=i
    return ret

# the test case:
print listsum([2,3,4])
# will then output 9

编辑:是的,我很慢。另一个答案可能更有帮助。 ;)

答案 2 :(得分:1)

这适用于python 3.x,它类似于Adam Smith解决方案

list_user = str(input("Please add the list you want to sum of format [1,2,3,4,5]:\t"))
total = 0
list_user = list_user.split() #Get each element of the input
for value in list_user:
    try:
        value = int(value) #Check if it is number
    except:
        continue
    total += value

print(total)

答案 3 :(得分:0)

您甚至可以编写一个可以对列表中嵌套列表中的元素求和的函数。例如,它可以加总driver.findElement(By.id("input1")).sendKeys("path/to/first/file-001 \n path/to/first/file-002 \n path/to/first/file-003");

[1, 2, [1, 2, [1, 2]]]

def my_sum(args): sum = 0 for arg in args: if isinstance(arg, (list, tuple)): sum += my_sum(arg) elif isinstance(arg, int): sum += arg else: raise TypeError("unsupported object of type: {}".format(type(arg))) return sum 输出将为my_sum([1, 2, [1, 2, [1, 2]]])

如果您使用标准构建函数9执行此任务,则会引发sum

答案 4 :(得分:0)

这是一个有点慢的版本,但它可以创造奇迹

# option 1
    def sumP(x):
        total = 0
        for i in range(0,len(x)):
            total = total + x[i]
        return(total)    

# option 2
def listsum(numList):
   if len(numList) == 1:
        return numList[0]
   else:
        return numList[0] + listsum(numList[1:])

sumP([2,3,4]),listsum([2,3,4])

答案 5 :(得分:0)

这应该很好用

user_input =  input("Enter a list of numbers separated by a comma")
user_list = user_input.split(",")

print ("The list of numbers entered by user:" user_list)


ds = 0
for i in user_list:
    ds += int(i)
print("sum = ", ds)

}

答案 6 :(得分:0)

使用累加器函数初始化累加器变量(runTotal),值为 0:

def sumTo(n):
runTotal=0
for i in range(n+1):
    runTotal=runTotal+i
return runTotal

打印 sumTo(15) #输出 120

答案 7 :(得分:0)

如果您使用的是 Python 3.0.1 或更高版本,请使用以下代码对使用 reduce 的数字/整数列表求和

from functools import reduce
from operator import add

def sumList(list):
     return reduce(add, list)

答案 8 :(得分:-1)

这里函数addelements只接受传递给函数addelements的参数为list并且该列表中的所有元素都是{{}时接受列表并返回该列表中所有元素的总和。 1}}。否则函数将返回消息“不是列表或列表没有所有整数元素”

integers

输出:

def addelements(l):
    if all(isinstance(item,int) for item in l) and isinstance(l,list):
        add=0
        for j in l:
            add+=j
        return add
    return 'Not a list or list does not have all the integer elements'

if __name__=="__main__":
    l=[i for i in range(1,10)]
#     l.append("A") This line will print msg "Not a list or list does not have all the integer elements"
    print addelements(l)

答案 9 :(得分:-1)

import math



#get your imput and evalute for non numbers

test = (1,2,3,4)

print sum([test[i-1] for i in range(len(test))])
#prints 1 + 2 +3 + 4 -> 10
#another sum with custom function
print math.fsum([math.pow(test[i-1],i) for i in range(len(test))])
#this it will give result 33 but why? 
print [(test[i-1],i) for i in range(len(test))]
#output -> [(4,0), (1, 1) , (2, 2), (3,3)] 
# 4 ^ 0 + 1 ^ 1 + 2 ^ 2 + 3 ^ 3 -> 33