Python 内置 f(x) 大小的参数



我正在努力编写一个脚本来返回为函数给出的参数总数,参数可以是字符串、元组、列表或映射字典。在下面的脚本中,当问题请求计算每个参数时,测试样本仅返回 3,因此 id 喜欢它返回 7。任何解释或帮助将不胜感激!

'''返回序列的长度(项数) (字符串、元组或列表)或映射(字典)。

编写一个返回参数总大小的函数。

注意:*args 表示变量参数列表,由元组表示。

def totSize(*args): 
return len(args)
print(totSize('abc', (1,), [1,2,3]))

3

我假设,你想得到所有参数的长度并将长度加在一起。

这是代码:

def totSize(*args):
return sum(map(len, args))

此代码首先将 len 映射到所有参数上['abc', (1,), [1, 2, 3]]这些参数变得[3, 1, 3]然后对它们求和。请注意,此代码假定所有参数都可以传递给len

此解决方案更通用,因为它适用于可以传递给len的任何对象以及简单的对象,如intfloat

def totSize(*args):
total_length = 0
for arg in args:
try:
total_length += len(arg)
except TypeError:
total_length += 1
return total_length

你可以检查元素是否Iterable(strtuplelistdict等),并根据其类型累加总大小(对于不可迭代的元素,如数字,在总大小中加 1)。

例如:

from collections import Iterable

def totSize(*args):
total_size = 0
for i in args:
if isinstance(i, Iterable):
total_size += len(i)
else:
total_size += 1
return total_size

print(totSize('abc', (1,), [1, 2, 3]))

有时,您可以使用len来获取每个参数中的项目数。您还需要涵盖参数没有长度的情况

>>> def totSize(*args):
...     count = 0
...     for arg in args:
...         try:
...             count += len(arg)
...         except TypeError:
...             count += 1
...     return count
... 
>>> print(totSize('abc', (1,), [1,2,3]))
7
from collections import Iterable
def totSize(*args):
return sum(len(x) if isinstance(x, Iterable) else 1 for x in args)

(感謝L. MacKenzie提醒Iterable)

最新更新