Problems in the use of sum. TypeError: 'int' object is not iterable

Problems in the use of sum. TypeError: 'int' object is not iterable

我在添加两个值 5 和 5 时出错。我想收到结果 10。我基于元组编写代码,这给我带来了一些以前的错误,因为它无法添加,例如,

sum_A = sum (count_A)

因为我收到一个错误

TypeError: unsupported operand type(s) for +: 'int' and 'tuple'

所以我用 sum(int(row[0]) 解决了 count_gol_fact_home_sqA 中的行。我不太喜欢这种方式。我不想使用 sum_A = sum (int (row [0]) for row in count_A)

但是我继续了,但是我 运行 陷入了一个错误,这并没有让我添加 sum_A 和 sum_B。

如何添加 sum_A 和 sum_B?有没有另一种方法可以更轻松地编写我的代码,方法是之前添加 sum_A = sum (count_A) 而不会收到错误?

#ELEMENT 1
cursor.execute('SELECT City FROM Nation WHERE X = ?', [X])
count_A = cursor.fetchall() #Print [(2,), (1,), (2,)]

sum_A = sum(int(row[0]) for row in count_A) #print 5
print(sum_A)
###########################################

#ELEMENT 2
cursor.execute('SELECT City FROM Nation WHERE Y = ?', [Y])
count_B = cursor.fetchall() #Print [(3,), (2,)]

sum_B = sum(int(row[0]) for row in count_B) #print 5
print(sum_B)
###########################################

SumA_B = sum(sum_A, sum_B) 
print(SumA_B) #ERROR: I would like to get result 10

错误:

Traceback (most recent call last):
  File "main.py", line 17, in <module>
    SumA_B = sum(sum_A, sum_B)
TypeError: 'int' object is not iterable

sum 需要一个可迭代对象,使用:

SumA_B = sum([sum_A, sum_B])

首先,要修复错误,您的问题是 sum 对可迭代对象的元素求和 - not a传递给它的可变数量的参数。所以你需要把它改成一个可迭代的,比如:

sum((sum_A, sum_B))

或者如果您只有两个项目,为什么不 count_A + count_B


然后,为了简化您的 sum,您可以使用 itertools.chain or the more convenient chain.from_iterable 来展平 2D 列表(就像您拥有的那样):

from itertools import chain

sum_A = sum(chain(*count_A))
# Or:
sum_A = sum(chain.from_iterable(count_A))

最后,您甚至不需要分别对 A 和 B 求和,然后再对结果求和。只需将它们连接起来并立即求和:

total_sum = sum(chain.from_iterable(count_A + count_B))

或者,本着链接的精神,您可以在链接两个列表之后通过链接所有元组来避免创建新列表(在执行 count_A + count_B 时):

total_sum = sum(chain.from_iterable(chain(count_A, count_B)))