常用的Python内置函数讲解

729 阅读6分钟

这是我参与8月更文挑战的第14天,活动详情查看:8月更文挑战

Python中有许多内置函数,可以放标高效的帮我们完成程序中遇到的一些需求,拥有很强大的功能,我们使用好了,可以大大提高代码效率。
本篇文章就来梳理一下经常使用的Python内置函数。

map()函数

map()

map()函数接受两个参数,一个是函数,一个是序列, map()将传入的函数依次作用到可迭代对象的每一个元素,并把结果作为迭代器(Iterator)返回。 简单说就是,map()函数会把序列里的每一个元素依次当做指定函数的参数执行一遍,最终返回执行结果的序列。

举个例子,对列表里的每个数字作平方:

nums = [1, 2, 3, 4, 5]
a = map(lambda x: pow(x, 2), nums)
for i in a:
    print(i)
# 结果依次输出1,4,9,16,25

通过结果可以看出,map()函数返回的依然是一个可迭代对象(Iterable),可以使用for循环遍历。

reduce()函数

前面说到使用map()函数对列表里的每个数字作平方操作,那么如果我想将列表里的各个元素相加求和,该怎么做呢?

这时候就该reduce()函数上场了。 reduce()函数会对序列中的元素进行累积操作。也是接收两个参数,函数(有两个参数)和序列,先对序列中的第 1、2 个元素进行函数操作,得到的结果再与第三个元素进行函数操作,以此类推,最终生成所有元素累积运算的结果。

注意: 在Python3中,reduce()函数已经被移到functools模块里,可以从functools模块引入(from functools import reduce) 来使用。

例如下面一段代码,可以求列表nums=[1,2,3,4]的元素累加和:

from functools import reduce


nums = [1, 2, 3, 4, 5]
a = reduce(lambda x, y: x + y, nums)
print(a)
# 结果输出15

再举个例子,将字母列表连接成一个字符串。

from functools import reduce


strings = ['t', 'i', 'g', 'e', 'r', 'i', 'a', 'f']
a = reduce(lambda x, y: x + y, strings)
print(a)
# 结果输出tigeriaf

虽然reduce()函数已经被移到functools模块里,不再是内置函数,但是它有用处太广泛了,也很重要,所以安排在这篇文章和内置函数一起介绍。

filter()函数

filter()函数用于过滤序列,过滤掉不符合条件的元素,返回由符合条件元素组成的新序列。同样接收两个参数,函数和序列,序列的每个元素作为参数传递给函数进行判断,然后返回True或False,最后将返回True的元素放到新序列中。

比如有一个由一些数字组成的列表,要把其中奇数去掉:

nums = [1, 2, 3, 4, 5, 6]
a = filter(lambda x: x % 2 == 0, nums)
print(list(a))
# 结果输出[2, 4, 6]

filter()函数的作用就是过滤掉不符合条件的元素,结果返回一个迭代器对象。

sorted()函数

在处理一些数据的时候,我们可能经常会遇到需要排序的操作,比如将列表、字典、元组里面的元素升序/降序排序。 这个时候就要sorted()函数出场了,sorted()函数可以对所有可迭代的对象进行排序操作,并返回列表。

比如下面代码对列表进行升序和降序操作:

a = sorted([4, 34, 5, 9, 26, 5])
print(a)
# 结果输出[4, 5, 5, 9, 26, 34]
b = sorted([4, 34, 5, 9, 26, 5], reverse=True)
print(b)
# 结果输出[34, 26, 9, 5, 5, 4]

我们还可以使用参数key,根据自定义规则排序,例如下面按字典的value来排序:

data = [{"count": 3}, {"count": 1}, {"count": 8}, {"count": 2}]
a = sorted(data, key=lambda x: x["count"])
print(a)
# 结果输出[{'count': 1}, {'count': 2}, {'count': 3}, {'count': 8}]

**注意sorted()与sort()区别:**sort()是应用在列表上的方法,sorted()可以对所有可迭代对象进行排序操作。列表的sort()方法返回的是在原来的列表上进行操作,无返回值,而内建函数sorted()方法返回的是一个新的序列,而不是在原来的基础上进行的操作。

reversed()函数

reverse()函数接受一个序列,将序列里的元素反转,并最终返回迭代器。 例如:

a = reversed([1, 2, 5, 4, 6])
print(list(a))
# 结果输出[6, 4, 5, 2, 1]

enumerate()函数

enumerate()函数用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般在for循环时使用。 例如:

strings = ['a', 'bb', 'ccc', 'dddd']
for index, data in enumerate(strings):
    print(index, data)

结果输出为

0 a
1 bb
2 ccc
3 dddd

Process finished with exit code 0

set()函数

当需要对一个列表进行去重的时候,set()函数就派上用场了,例如:

data = ['a', 'b', 'c', 'd', 'a', 'c']
print(set(data))
# 结果输出{'a', 'b', 'c', 'd'}

set([iterable])用于创建一个无序不重复的元素集,可进行关系测试,删除重复数据,还可以计算交集、差集、并集等。

a = set('hello')
b = set('world')

print(a)  # 输出{'e', 'h', 'l', 'o'}
print(b)  # 输出{'d', 'r', 'o', 'l', 'w'}
print(a & b)  # 交集 输出{'l', 'o'}
print(a | b)  # 并集 输出{'h', 'e', 'l', 'o', 'd', 'w', 'r'}
print(a - b)  # 差集 输出{'h', 'e'}

eval()函数

eval()函数的功能是将字符串转换成表达式,并返回表达式的值。

a = eval('[1, 2, 3, 4]')
print(type(a))
# 结果输出<class 'list'>

b = eval('1+2*2')
print(b)
# 结果输出5

zip()函数

zip()函数用于将可迭代对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的列表。 如果各个迭代器的元素个数不一致,则返回列表长度与最短的对象相同,利用*号操作符,可以将元组解压为列表。

a = [1, 2, 3]
b = [4, 5, 6]
c = [4, 5, 6, 7, 8]
print(zip(a, b))
print(zip(*zip(a, b)))
print(list(zip(a, b)))  # 转换为list显示
print(list(zip(a, c)))  # 元素个数与最短的列表一致
print(list(zip(*zip(a, b))))

结果输出为:

<zip object at 0x0BFC7DF0>
<zip object at 0x0BFC7DF0>
[(1, 4), (2, 5), (3, 6)]
[(1, 4), (2, 5), (3, 6)]
[(1, 2, 3), (4, 5, 6)]

Process finished with exit code 0

总结

其实除了这些,还有很多其他的内置函数,这里就不一一介绍了,想了解的可以看下官方文档:Python内置函数

最后,感谢女朋友在工作和生活中的包容、理解与支持 !