我是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.
答案 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