欢迎访问宙启技术站
智能推送

Python中的sum函数:如何计算列表或元组中的总和?

发布时间:2023-06-18 07:21:57

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编程中常用的一个内置函数之一。