作业讲解:

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)
View Code

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)
价格大于100的支票

 新内容:正则表达式和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

作业: