sfo*_*r12 3 python function list python-2.7
我正在尝试创建一个函数,该函数将数字列表或整数的平均值作为变量。到目前为止,我有:
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))
Run Code Online (Sandbox Code Playgroud)
当我输入一个列表时,比如
average([1, 3, 5, 2])
Run Code Online (Sandbox Code Playgroud)
它很好用。但是当我进入
average(1, 3, 5, 2)
Run Code Online (Sandbox Code Playgroud)
它给出了“TypeError:'int'对象不可迭代”。我检查了其他问题,但似乎没有一个解决方案有效。我试图检查它是否是一个带有 type() 和 isinstance() 的列表,但是每当我让其中一个工作时,另一个就会抛出错误。
args 是一个元组,所以检查是否args[0]是一个列表,内容的总和args[0],如果只是 ints 只是在 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
Run Code Online (Sandbox Code Playgroud)
如果要接受元组,请使用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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
13553 次 |
| 最近记录: |