Что мне делать с jj, чтобы исправить ошибку типа операнда для +: int и кортежа? - PullRequest
1 голос
/ 25 мая 2020
 >>> sum(jj)
Traceback (most recent call last):
  File "<pyshell#17>", line 1, in <module>
    sum(jj)
TypeError: unsupported operand type(s) for +: 'int' and 'tuple'
>>> jj
((2,), (2, 3))

Почему python выдает эту ошибку? И как мне это исправить?

Ответы [ 2 ]

1 голос
/ 25 мая 2020

Попробуйте следующее:

import itertools

jj = ((2,), (2, 3))

foo = sum(itertools.chain(*jj))

результат 7.

1 голос
/ 25 мая 2020

Каждый элемент внутри вашего кортежа jj сам по себе является кортежем, и вы не можете добавить кортеж (2,) в 0 (sum() начинается со значения 0, которое вы можете изменить с помощью второго аргумента ).

Вы должны суммировать каждый элемент в каждом кортеже в jj.

>>> jj = ((2,), (2, 3))
>>> jj
((2,), (2, 3))
>>> find_sum = lambda iterable: sum([sum(i) for i in iterable])
>>> find_sum(jj)
7

Для кортежа вложенных объектов, таких как jj = [ (1,), (2, 0), (3, (1, 3, 5)) ], это будет работать:

def find_total_sum(iterable):
    total = 0
    def find_sum(iterable):
        nonlocal total
        for item in iterable:
            if isinstance(item, int):
                total += item
            elif isinstance(item, (tuple, list)):
                find_sum(item)
    find_sum(iterable)
    return total

print(find_total_sum([ (1,), (2, 0), (3, (1, 3, 5)) ]))

...