Python Встроенный размер аргумента f (x) - PullRequest
1 голос
/ 29 апреля 2020

Я пытаюсь написать скрипт, который возвращает общее количество аргументов, заданных для функции, аргументами могут быть либо строка, кортеж, список или словарь сопоставления. В приведенном ниже сценарии тестовый образец возвращает 3 только тогда, когда проблема требует подсчитать каждый отдельный аргумент, поэтому id должен возвращать 7. Любое объяснение или помощь приветствуются!

'' 'Возвращаем длину ( количество элементов) последовательности (строка, кортеж или список) или отображения (словарь). '' '

Напишите функцию, которая возвращает общий размер аргументов.

Примечание: * args обозначает список переменных аргументов, представленный кортежем.

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

3

Ответы [ 5 ]

2 голосов
/ 29 апреля 2020

Это решение является более общим, поскольку оно работает для любого объекта, который может быть передан len, а также для простых объектов, таких как int или float s

def totSize(*args):

    total_length = 0
    for arg in args:
        try:
            total_length += len(arg)
        except TypeError:
            total_length += 1
    return total_length
2 голосов
/ 29 апреля 2020

Я предполагаю, что вы хотите получить длину всех аргументов и сложить их вместе.

Вот код:

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

Этот код сначала отображает len на все аргументы ['abc', (1,), [1, 2, 3]] становится [3, 1, 3] и затем суммирует их. Обратите внимание, что этот код предполагает, что все аргументы могут быть переданы в len

1 голос
/ 29 апреля 2020

Вы можете проверить, является ли элемент Iterable (str, tuple, list, dict, et c ..) и накапливать общий размер в соответствии с его типом (для не повторяемых элементы, такие как цифры, добавляют 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]))
0 голосов
/ 29 апреля 2020
from collections import Iterable
def totSize(*args):
    return sum(len(x) if isinstance(x, Iterable) else 1 for x in args)

(спасибо L. MacKenz ie за напоминание о Iterable)

0 голосов
/ 29 апреля 2020

Вы можете использовать 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...