这是我参与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内置函数
最后,感谢女朋友在工作和生活中的包容、理解与支持 !