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)))
我在添加两个值 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)))