我正在尝试创建一个函数,将数字列表或整数的平均值作为变量给出。到目前为止,我有:
def average(*args):
if type(args) is list:
for x in args:
print sum(x) / float(len(x))
else:
for x in args:
args = list(args)
print sum(x) / float(len(x))
当我输入一个列表时,比如
average([1, 3, 5, 2])
效果很好。但是当我进入
average(1, 3, 5, 2)
它给出“TypeError:‘int’对象不可迭代”。 我检查了其他问题,但似乎没有一个解决方案有效。我试图检查它是否是一个包含 type() 和 isinstance() 的列表,但每当我让其中一个工作时,另一个就会抛出错误。
最佳答案
args 是一个元组,所以检查 args[0]
是否是 args[0]
内容总和的列表,如果只是 int 被传递到 sum args :
def average(*args):
if isinstance(args[0],list):
print(sum(args[0]) / float(len(args[0])))
else:
print (sum(args) / float(len(args)))
In [2]: average(1, 3, 5, 2)
2.75
In [3]: average([1, 3, 5, 2])
2.75
如果你想接受元组,使用collections.Iterable
:
from collections import Iterable
def average(*args):
if isinstance(args[0],Iterable):
print(sum(args[0]) / float(len(args[0])))
else:
print (sum(args) / float(len(args)))
In [5]: average([1, 3, 5, 2])
2.75
In [6]: average(1, 3, 5, 2)
2.75
In [7]: average((1, 3, 5, 2))
2.75
关于python - 创建一个以列表或整数作为参数的函数 (Python),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26579033/