Python基础学习之常见的内建函数整理


Posted in Python onSeptember 06, 2017

 前言

Python针对众多的类型,提供了众多的内建函数来处理,这些内建函数功用在于其往往可对多种类型对象进行类似的操作,即多种类型对象的共有的操作,下面话不多说了,来一看看详细的介绍吧。

map()

map()函数接受两个参数,一个是函数,一个是可迭代对象(Iterable),map将传入的函数依次作用到可迭代对象的每一个元素,并把结果作为迭代器(Iterator)返回。

举例说明,有一个函数f(x)=x^2 ,要把这个函数作用到一个list[1,2,3,4,5,6,7,8,9]上:

运用简单的循环可以实现:

>>> def f(x):
...  return x * x
...
L = []
for n in [1, 2, 3, 4, 5, 6, 7, 8, 9]:
 L.append(f(n))
print(L)

运用高阶函数map()

>>> r = map(f, [1, 2, 3, 4, 5, 6, 7, 8, 9])
>>> list(r)
[1, 4, 9, 16, 25, 36, 49, 64, 81]

结果r是一个迭代器,迭代器是惰性序列,通过list()函数让它把整个序列都计算出来并返回一个list。

如果要把这个list所有数字转为字符串利用map()就简单了:

>>> list(map(str, [1, 2, 3, 4, 5, 6, 7, 8, 9]))
['1', '2', '3', '4', '5', '6', '7', '8', '9']

小练习:利用map()函数,把用户输入的不规范的英文名字变为首字母大写其他小写的规范名字。输入['adam', 'LISA', 'barT'],输出['Adam', 'Lisa', 'Bart']

def normalize(name):
  return name.capitalize()

 l1=["adam","LISA","barT"]
 l2=list(map(normalize,l1))
 print(l2)

reduce()

reduce()函数也是接受两个参数,一个是函数,一个是可迭代对象,reduce将传入的函数作用到可迭代对象的每个元素的结果做累计计算。然后将最终结果返回。

效果就是:reduce(f, [x1, x2, x3, x4]) = f(f(f(x1, x2), x3), x4)

举例说明,将序列[1,2,3,4,5]变换成整数12345:

>>> from functools import reduce
>>> def fn(x, y):
...  return x * 10 + y
...
>>> reduce(fn, [1, 2, 3, 4, 5])
12345

小练习:编写一个prod()函数,可以接受一个list并利用reduce求积:

from functools import reduce
def pro (x,y):
  return x * y
 def prod(L):
  return reduce(pro,L)
 print(prod([1,3,5,7]))

map()reduce()综合练习:编写str2float函数,把字符串'123.456'转换成浮点型123.456

CHAR_TO_FLOAT = {
 '0': 0,'1': 1,'2': 2,'3': 3,'4': 4,'5': 5,'6': 6,'7': 7,'8': 8,'9': 9, '.': -1
}
def str2float(s):
 nums = map(lambda ch:CHAR_TO_FLOAT[ch],s)
 point = 0
 def to_float(f,n):
   nonlocal point
   if n==-1:
    point =1
    return f
   if point ==0:
    return f*10+n
   else:
    point =point *10
    return f + n/point

 return reduce(to_float,nums,0)#第三个参数0是初始值,对应to_float中f

filter()

filter()函数用于过滤序列,filter()也接受一个函数和一个序列,filter()把传入的函数依次作用于每个元素,然后根据返回值是True还是False决定保留还是丢弃该元素。

举例说明,删除list中的偶数:

def is_odd(n):
 return n % 2 == 1

list(filter(is_odd, [1, 2, 4, 5, 6, 9, 10, 15]))
# 结果: [1, 5, 9, 15]

小练习:用filter()求素数

计算素数的一个方法是埃氏筛法,它的算法理解起来非常简单:

首先,列出从2开始的所有自然数,构造一个序列:

2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, ...

取序列的第一个数2,它一定是素数,然后用2把序列的2的倍数筛掉:

3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, ...

取新序列的第一个数3,它一定是素数,然后用3把序列的3的倍数筛掉:

5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, ...

取新序列的第一个数5,然后用5把序列的5的倍数筛掉:

7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, ...

不断筛下去,就可以得到所有的素数。

用Python实现这个算法,先构造一个从3开始的期数数列:

def _odd_iter(): 
n = 1
 while True:
  n = n + 2
  yield n
#这是一个生成器,并且是一个无线序列

定义一个筛选函数:

def _not_divisible(n):
 return lambda x: x % n > 0

定义一个生成器不断返回下一个素数:

def primes():
 yield 2
 it = _odd_iter() # 初始序列
 while True:
  n = next(it) # 返回序列的第一个数
  yield n
  it = filter(_not_divisible(n), it) # 构造新序列

打印100以内素数:

for n in primes():
 if n < 100:
  print(n)
 else:
  break

sorted()

python内置的sorted()函数可以对list进行排序:

>>> sorted([36, 5, -12, 9, -21])
[-21, -12, 5, 9, 36]

sorted()函数也是一个高阶函数,还可以接受一个key函数来实现自定义排序:

>>> sorted([36, 5, -12, 9, -21], key=abs)
[5, 9, -12, -21, 36]

key指定的函数将作用于list的每一个元素上,并根据key函数返回的结果进行排序.

默认情况下,对字符串排序,是按照ASCII的大小比较的,由于'Z' < 'a',结果,大写字母Z会排在小写字母a的前面。如果想忽略大小写可都转换成小写来比较:

>>> sorted(['bob', 'about', 'Zoo', 'Credit'], key=str.lower)
['about', 'bob', 'Credit', 'Zoo']

要进行反向排序,不必改动key函数,可以传入第三个参数reverse=True

>>> sorted(['bob', 'about', 'Zoo', 'Credit'], key=str.lower, reverse=True)
['Zoo', 'Credit', 'bob', 'about']

小练习:假设我们用一组tuple表示学生名字和成绩:L = [('Bob', 75), ('Adam', 92), ('Bart', 66), ('Lisa', 88)] 。用sorted()对上述列表分别按c成绩从高到低排序:

L = [('Bob', 75), ('Adam', 92), ('Bart', 66), ('Lisa', 88)]
def by_score(t):
 for i in t:
   return t[1]
L2=sorted(L,key= by_score)
print(L2)

运用匿名函数更简洁:

L2=sorted(L,key=lambda t:t[1])
print(L2)

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

Python 相关文章推荐
python翻译软件实现代码(使用google api完成)
Nov 26 Python
python获取文件后缀名及批量更新目录下文件后缀名的方法
Nov 11 Python
为Python程序添加图形化界面的教程
Apr 29 Python
使用Python编写爬虫的基本模块及框架使用指南
Jan 20 Python
使用Python读写及压缩和解压缩文件的示例
Jul 08 Python
教大家玩转Python字符串处理的七种技巧
Mar 31 Python
pandas string转dataframe的方法
Apr 11 Python
Python 常用模块 re 使用方法详解
Jun 06 Python
OpenCV模板匹配matchTemplate的实现
Oct 18 Python
Anaconda 查看、创建、管理和使用python环境的方法
Dec 03 Python
关于PyCharm安装后修改路径名称使其可重新打开的问题
Oct 20 Python
Python 中的函数装饰器和闭包详解
Feb 06 Python
Python升级导致yum、pip报错的解决方法
Sep 06 #Python
Python实现求两个csv文件交集的方法
Sep 06 #Python
Python中的is和==比较两个对象的两种方法
Sep 06 #Python
Python中表示字符串的三种方法
Sep 06 #Python
通过Python实现自动填写调查问卷
Sep 06 #Python
Python实现在线暴力破解邮箱账号密码功能示例【测试可用】
Sep 06 #Python
Python基于回溯法子集树模板解决旅行商问题(TSP)实例
Sep 05 #Python
You might like
php性能优化分析工具XDebug 大型网站调试工具
2011/05/22 PHP
php中将网址转换为超链接的函数
2011/09/02 PHP
解析php中const与define的应用区别
2013/06/18 PHP
PHP中使用smarty生成静态文件的例子
2014/04/24 PHP
PHP根据传入参数合并多个JS和CSS文件的简单实现
2014/06/13 PHP
图文详解phpstorm配置Xdebug进行调试PHP教程
2016/06/13 PHP
jquery中防刷IP流量软件影响统计的一点对策
2011/07/10 Javascript
$.getJSON在IE下失效的原因分析及解决方法
2013/06/16 Javascript
判断客户浏览器是否支持cookie的示例代码
2013/12/23 Javascript
js获取当前地址 JS获取当前URL的示例代码
2014/02/26 Javascript
JavaScript fontcolor方法入门实例(按照指定的颜色来显示字符串)
2014/10/17 Javascript
非jQuery实现照片散落桌子上,单击放大的LightBox效果
2014/11/28 Javascript
angularjs的一些优化小技巧
2014/12/06 Javascript
Bootstrap每天必学之导航条(二)
2016/03/01 Javascript
Bootstrap每天必学之模态框(Modal)插件
2016/04/26 Javascript
Nodejs 发送Post请求功能(发短信验证码例子)
2017/02/09 NodeJs
Angular模板表单校验方法详解
2017/08/11 Javascript
微信小程序支付功能 php后台对接完整代码分享
2018/06/12 Javascript
Vue项目打包编译优化方案
2020/09/16 Javascript
[01:07:17]EG vs Optic Supermajor 败者组 BO3 第一场 6.6
2018/06/07 DOTA
Python中encode()方法的使用简介
2015/05/18 Python
Python 中 Virtualenv 和 pip 的简单用法详解
2017/08/18 Python
python数据结构之链表详解
2017/09/12 Python
Python reduce()函数的用法小结
2017/11/15 Python
python验证码识别教程之灰度处理、二值化、降噪与tesserocr识别
2018/06/04 Python
Python wxPython库消息对话框MessageDialog用法示例
2018/09/03 Python
python使用matplotlib模块绘制多条折线图、散点图
2020/04/26 Python
详解pandas安装若干异常及解决方案总结
2019/01/10 Python
Python字典的基本用法实例分析【创建、增加、获取、修改、删除】
2019/03/05 Python
PyQt编程之如何在屏幕中央显示窗体的实例
2019/06/18 Python
python except异常处理之后不退出,解决异常继续执行的实现
2020/04/25 Python
使用phonegap检测网络状态的方法
2017/03/30 HTML / CSS
工商企业管理专业自荐信范文
2014/04/12 职场文书
2015年“世界无车日”活动方案
2015/05/06 职场文书
详细总结Python常见的安全问题
2021/05/21 Python
分享7个 Python 实战项目练习
2022/03/03 Python