Сумма целых чисел в списке в Python - def Recursive_function (с одним аргументом) - PullRequest
0 голосов
/ 30 сентября 2019

Сумма элементов (представляющих целые числа) в списке. НапримерA = ["xx", "3e", "5", "44"]

Моя функция возвращает 49. Итак, RECURSIVE следует сделать то же самое.

Я успешно реализовал версию ITERATIVE .

def add_iter(my_list):
    t = 0
    for x in my_list:
        if x.isdigit() == True:
            t+= int(x)
    print(t)

Я хотел бы преобразовать его в RECURSIVE функцию.

Ответы [ 5 ]

2 голосов
/ 30 сентября 2019

Поскольку это упражнение, я не пишу ответ, но даю некоторые подсказки

  • Сумма пустого списка равна нулю
  • сумма непустогоlist is (первый элемент) + (сумма остальной части списка)
  • первый элемент может быть проигнорирован, если это не число
0 голосов
/ 30 сентября 2019

Короче рекурсивное решение:

def add_iter(d):
  return (0 if not d[0].isdigit() else int(d[0]))+(0 if not d[1:] else add_iter(d[1:]))

A = ["xx", "3e", "5", "44"]
print(add_iter(A))

Вывод:

49
0 голосов
/ 30 сентября 2019

Вот идея:

a = ["aa", "a3", "33", "5"]
def add_rec(ls):
    if len(ls) == 0:
        return 0
    else:
        num = ls.pop()
        if num.isdigit():
            return int(num) + add_rec(ls)
        else:
            return 0

print(add_rec(a))
# Note this will modify your original list and make it empty, if that's an issue:
# print(add_rec(a.copy()))

Вывод:

38
0 голосов
/ 30 сентября 2019

Попробуйте это:

def add_recursive(my_list):
    if my_list:
        x = my_list[0]
        if x.isdigit():
            return int(x) + add_recursive(my_list[1:])
        else:
            return add_recursive(my_list[1:])
    else:
        return 0


A = ["xx", "3e", "5", "44"]
add_recursive(A)
# 49
0 голосов
/ 30 сентября 2019

Рекурсивная версия работает аналогично, когда вы только повторяете через каждый элемент, прежде чем вернуться к остальной части списка. Ваш базовый случай будет, когда в списке останется только один элемент. Я бы предложил создать вспомогательный класс, чтобы убедиться, что ваши значения действительны числа

# Helper function to clean up int value
def zero_or_value(value):
  try:
    return int(value)
  except ValueError as err:
    # Handler err here if you want
    pass
  return 0


def recursive_add_iter(my_list):
  if not my_list: # Return 0 if list is empty
    return 0
  elif len(my_list) == 1: # Base case, try converting last element
    return zero_or_value(my_list[0])

  return zero_or_value(my_list[0]) + recursive_add_iter(my_list[1:])


A = ["xx", "3e", "5", "44"]

print(recursive_add_iter(A))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...