作业讲解:
1、 reversed 和sorted和list 列表类型的内置sort、reverse 有什么区别?
list列表内置的这两个方法是直接修改原来的列表
reversed 和sorted 不直接修改原列表;
reversed返回的是一个可迭代对象
2、用map来处理字符串列表,把列表中所有人都变成sb ,比如 alex_sb
name=["alex","wupeiqi","yuanhao","nezha"]
name=["alex","wupeiqi","yuanhao","nezha"] # for i in name: # i=i+"_sb" # print(i) # 第一种方法 def func(n): return n+"_sb" ret=map(func,name) for i in ret: print(i) # 第二种方法 ret=map(lambda n:n+"_sb",name) for i in ret: print(i)
3、用函数filter筛选列表中的偶数
num=[1,2,3,4,5,6] # 方法一 ret=filter(lambda n:True if n%2==0 else False,num) for i in ret: print(i) #方法2 def func(n): return n%2==0 ret=filter(func,num) for i in ret: print(i)
4、股票的价格计算(例子) map 和lambda
portfolio=[ {"name":"IBM","shares":100,"price":91.1}, {"name":"AAPL","shares":50,"price":543.22}, {"name":"FB","shares":200,"price":21.09}, {"name":"HPQ","shares":35,"price":31.75}, {"name":"YHOO","shares":45,"price":16.35} ] #第一种方法 def func(dic): return {dic["name"]:dic["shares"]*dic["price"]} ret=map(func,portfolio) for i in ret: print(i) #第二种方法 ret=map(lambda dic:{dic["name"]:dic["shares"]*dic["price"]},portfolio) for i in ret: print(i)
portfolio=[ {"name":"IBM","shares":100,"price":91.1}, {"name":"AAPL","shares":50,"price":543.22}, {"name":"FB","shares":200,"price":21.09}, {"name":"HPQ","shares":35,"price":31.75}, {"name":"YHOO","shares":45,"price":16.35} ] ret=filter(lambda dic:dic["price"]>100 ,portfolio) for i in ret: print(i)
新内容:正则表达式和re模块
1、例子:利用正则来判断电话号码的合法性
import re phone_number=input("please input your phone number: ") if re.match('^(13|14|15|17|18)[0-9]{9}$',phone_number): print("是合法的手机号码") else: print("不是合法的手机号码")
2、初识元字符和量词
[字符组] 表示在一个字符的位置可以出现的所有情况的集合就是一个字符组
3、ascii码
4、字符
5、量词
6、例子:正则匹配:字符 量词 非贪婪标志
#字符:字符、字符组、元字符 表示一个字符位置上可以出现的内容
7、匹配身份证号
re模块知识讲解
1、 findall
import re ret=re.findall(r"\d",r"eva7 engon1 yuan") #返回多有满足匹配条件的结果,放在列表里 print(ret) #['7', '1']
2、search
import re ret=re.search("a","eva engon yuan") if ret: print(ret.group()) # a # search 从左到右依次找,找到一个就回来,需要使用group() # 获取返回值,如果re.search找不到就返回None,使用group会报错
3、math
import re
ret=re.search("v","bva engon yuan")
if ret:
print(ret.group())
# math 从头开始匹配,匹配不上返回None,匹配上了需要使用group返回值
import re ret=re.match("b","bva engon yuan") print(ret.group()) # math 从头开始匹配,匹配不上就报错,匹配上了需要使用group返回值
4、split
import re ret=re.split("b","bva engon yuan") #先按"a"分割得到" "和”va engon yuan",在对""和"va engon yuan"分别按"b"分割 print(ret) #['', 'va engon yuan']
5、sub 和subn
import re ret=re.sub("\d","H","bva cv21engon yuan",1) #replace(old,new,count) print(ret) #sub(re,new,str,count) ret1=re.subn("\d","H","sdsf123dsfxcvxzfw1") #将数字替换成'H',返回元组(替换的结果,替换了多少次 print(ret1)
6、compile 节省时间
import re obj=re.compile("\d{3}") #将正则表达式编译成为一个正则表达式对象,规则要匹配的是三个数字。 ret=obj.search("asdcx12ssdsf2133sdf") #正则表达式对象调用search,参数为待匹配的字符串 print(ret.group()) # 方法2 ret1=re.search("\d{3}","asdcx12ssdsf2133sdf").group() print(ret1) # 213
7、finditer 节省内存
import re ret=re.finditer("\d","sdsfsd1324dsg") #finciter 返回一个存匹配结果的迭代器 print(ret) for i in ret: print(i.group()) # print(next(ret).group()) #查看第一个结果 # print(next(ret).group()) #查看第二个结果 print([i.group() for i in ret]) #查看剩余的结果
总结:
(1)findall 找所有,返回列表
(2)search 找第一个,返回值.group()
(3) match 从开始匹配,返回值.group()
(4)split 根据正则表达式切割
(6)sub/subn 根据正则表达式去替换
(7)compile 编译正则
(8)finditer 找所有,返回迭代器,取值需要for ,结果需要group
作业: