Python中的sum函数:如何计算列表或元组中的总和?
Python是一种动态解释性高级编程语言,在Python中,sum()是一个内置的函数,这个函数可以计算给定迭代器中所有元素的总和。迭代器通常是列表、元组和字典等可迭代对象。sum()函数的实现是使用一个for循环来依次遍历迭代器中的所有元素,并将遍历到的每个元素加到一个累加器中。在本文中,我们将更深入地了解sum()函数在Python中的实现。
一、基本用法
sum()函数的基本用法是计算迭代器中的总和。下面是sum()函数的基本用法:
#计算列表中元素总和 a = [1, 2, 3, 4, 5] print(sum(a)) #输出:15 #计算元组中元素总和 b = (1, 2, 3, 4, 5) print(sum(b)) #输出:15
可以看到,sum()函数可以计算列表和元组中元素的总和。如果要计算字典的值,则需要将字典的值提取出来,如下所示:
c = {'a':1, 'b':2, 'c':3, 'd':4, 'e':5}
print(sum(c.values())) #输出:15
这里使用了字典的values()函数提取了字典的值,并将其传递给sum()函数进行计算。
二、更高级的用法
sum()函数还支持一个可选参数start,它表示累加器的起始值。如果不提供这个参数,默认的起始值为0。下面是sum()函数的更高级用法:
a = [1, 2, 3, 4, 5] print(sum(a, 10)) #a列表中的元素总和加上10,输出:25 b = (1, 2, 3, 4, 5) print(sum(b, 10)) #b元组中的元素总和加上10,输出:25
所以,我们可以使用start参数扩展sum()函数的功能。
三、注意事项
注意到sum()函数只能计算数值类型的元素,比如整数、浮点数等。因此,如果迭代器中包含非数值类型的元素,sum()函数将抛出一个TypeError异常。例如:
a = [1, 2, '3', 4, 5] print(sum(a)) #TypeError异常:unsupported operand type(s) for +: 'int' and 'str'
这里的列表中包含一个字符串类型的元素'3',因此sum()函数抛出了TypeError异常。我们需要先将列表中非数值类型的元素剔除,然后再对剩下的元素求和。
a = [1, 2, '3', 4, 5] a = [i for i in a if isinstance(i, (int, float))] #剔除非数值类型的元素 print(sum(a)) #输出:12
在Python 2.x中,sum()函数的用法和Python 3.x略有不同。在Python 2.x中,如果迭代器中包含字符串类型的元素,sum()函数会对字符串进行拼接,而不是抛出异常。例如:
a = [1, 2, '3', 4, 5] print sum(a) #输出:'12345'
因此,在Python 2.x中需要特别注意sum()函数的用法,以避免意外的结果。
四、自定义sum()函数
如果需要计算的元素的类型比较特殊,或者需要在计算过程中进行一些特殊的操作,我们可以自定义一个sum()函数。自定义sum()函数的实现方式很简单,只需要使用for循环依次遍历迭代器中的所有元素,并将元素传递给累加器函数进行计算。下面是一个自定义sum()函数的示例:
def mysum(lst, start=0):
s = start
for x in lst:
s = s + 2*x #每个元素乘以2
return s
a = [1, 2, 3, 4, 5]
print(mysum(a)) #输出:30
这里定义了一个带有两个参数的mysum()函数,第一个参数是要计算的迭代器,第二个参数是累加器函数的起始值。在这个例子中,mysum()函数将每个元素乘以2,并将结果加到累加器中,最后返回累加器的值。运行程序时,输出的结果是30,正好是列表中所有元素乘以2后的总和。我们可以根据需要自由地定义mysum()函数的实现方式,以满足不同的计算需求。
总结
本文介绍了Python中sum()函数的基本用法和更高级的用法,并提供了一些使用sum()函数的示例。需要注意的是,在迭代器中包含非数值类型的元素时,sum()函数会抛出TypeError异常,需要先将非数值类型的元素剔除。我们还可以自定义一个sum()函数以满足不同的计算需求。Python中sum()函数功能强大、灵活性高,是Python编程中常用的一个内置函数之一。
