文章目录
- 利用python进行数据分析 —— python基础知识进阶
- 重点笔记:正则表达式
- re.match 匹配开头
- re.search 全文匹配
- re.sub 替换删除
- re.compile 编译正则
- findall 返回列表
- finditer 返回迭代器
- re.split 分割返回列表
- (?P...) 分组匹配
- 正则表达符号、修饰符
- 通配符1 `^`:字符串的开头
- 通配符2 `$`:字符串的结尾
- 通配符3 `.`: 任何字符,除了换行
- 通配符4 `|`:或
- 通配符5 `{}`: 明确数量
- 通配符6 `[]`: 一系列符号
- 通配符7 `()`:一个表达部分的逻辑分组
- 通配符8 `*` :0个或多个前面的字符,贪婪模式
- 通配符9 `+`:1个或多个前面的字符
- 通配符10 `?`:0个或多个前面的字符,非贪婪模式
- 通配符11 `\`:匹配是否有特殊符号
- `[^aeiou]`:匹配不在这里的单个字母
- `[0-9a-fA-F]`:用 - 可以指明一个连续的字符范围
- `\d`:十进制数字,相当于[0-9],其他进制不行
- `\D`:非数字,相当于[^0-9],其他进制也不包括
- `\w`:任何词汇的字符,相当于[a-zA-Z_0-9]
- `\W`:非词汇字符,相当于[^a-zA-Z_0-9]
- `\s`:所有的空白字符换页,换行,回车,Tab,纵向Tab,相当于[ \f\n\r\t\v]
- `\S`:所有的非空白字符,相当于[^ \f\n\r\t\v]
- 不熟悉的知识点:匿名函数Lambda
- `sort()`函数和`sorted()`函数区别
- 不熟悉的知识点:柯里化 —— 部分参数的应用
我是第一次接触机器学习,所以对于机器学习的学习过程研究比较迷茫,最终选定跟着一个B站博主 致敬大神 学习机器学习的基础课程。她的主页有关于机器学习和深度学习的学习顺序以及预备知识等等,比较适合我这种刚入门,或者可以跟随我的博客进行学习。
利用python进行数据分析 —— python基础知识进阶
我之前有一些python
的基础,所以直接从这本书开始学习一些python
进阶的基础知识。这本书不需要全部都看,博主有视频合集,可以直接选择跟着博主视频学习一些必要的基础知识,通俗易懂!
这本书的学习笔记,可以参考该博主的 GitHub ,笔记内容真的很详细!!!
我的这篇文章主要针对一些比较复杂和陌生的内容进行复盘。
重点笔记:正则表达式
re.match 匹配开头
功能:匹配开头,如果匹配返回某个值,如果不匹配返回None
通式:re.match(pattern, string, flag=0)
,
pattern:正则表达式如a
,如\d
代表0-9
的数字
string:要匹配的字符串如abc123
flags:标志位,设置匹配方式,如是否区分大小写等
import re
print(re.match('b','abc123'))None
import re
print(re.match('a','abc123'))<re.Match object; span=(0, 1), match='a'>
#span是指匹配范围为(0,1)
start() 返回匹配开始的位置
end() 返回匹配结束的位置
span() 返回一个元组包含匹配 (开始,结束) 的位置,span就是范围的意思life span寿命
group() 返回被 RE 匹配的字符串
re.search 全文匹配
功能:扫描整个字符串,匹配成功,返回第一个匹配成功的对象,否则返回None
通式:re.search(pattern, string, flags=0)
re.sub 替换删除
功能:
substitude
缩写,替换匹配项,用空去替换,那就是删除通式:
re.sub(pattern, repl, string, count=0, flags=0)
repl : 替换的字符串,也可为一个函数
count : 模式匹配后替换的最大次数,默认 0 表示替换所有的匹配
re.compile 编译正则
功能:编译正则表达式,生成一个
pattern
,供match()
和search()
使用通式:
re.compile(pattern, flags)
findall 返回列表
功能:全字符串找,匹配,并返回一个列表,否则返回空列表。
通式:
findall(string[, pos[, endpos]])
-
string
: 待匹配的字符串。 -
pos
: 可选参数,指定字符串的起始位置,默认为 0。 -
endpos
: 可选参数,指定字符串的结束位置,默认为字符串的长度
finditer 返回迭代器
功能:类似
findall
,只不过返回迭代器通式:
re.finditer(pattern, string, flags=0)
re.split 分割返回列表
功能:按照能够匹配的子串将字符串分割后返回列表
通式:re.split(pattern, string [, maxsplit=0, flags=0])
maxsplit
:分隔次数,maxsplit=1
分隔一次,默认为0
,不限制次数
import re
pattern = re.compile(r'\W+')
result1 = re.split(pattern, ' runoob, runoob, runoob. ',maxsplit=0)
result2 = re.split(pattern, ' runoob, runoob, runoob. ',maxsplit=1)
print(result1)
print(result2)# \W非字母数字及下划线
# 也就是字母数字下划线留着
# ,空格不能要,见到分隔
# .也不能要,见到分隔
# 分隔一次,列表里就有一个元素,就有一个,
# 所以开头结尾都有个空
['', 'runoob', 'runoob', 'runoob', '']
['', 'runoob, runoob, runoob. ']
(?P…) 分组匹配
功能:分组匹配,一对值
通式:((?P 《key》 \pattern) 得到一组对应的值,key:匹配的字符
使用groupdict函数可以变成字典
import re
s = '1102231990xxxxxxxx'
res = re.search('(?P<province>\d{3})(?P<city>\d{3})(?P<born_year>\d{4})',s)
print(res.groupdict()){'province': '110', 'city': '223', 'born_year': '1990'}
正则表达符号、修饰符
通配符1 ^
:字符串的开头
通配符2 $
:字符串的结尾
通配符3 .
: 任何字符,除了换行
通配符4 |
:或
通配符5 {}
: 明确数量
通配符6 []
: 一系列符号
通配符7 ()
:一个表达部分的逻辑分组
通配符8 *
:0个或多个前面的字符,贪婪模式
通配符9 +
:1个或多个前面的字符
通配符10 ?
:0个或多个前面的字符,非贪婪模式
通配符11 \
:匹配是否有特殊符号
[^aeiou]
:匹配不在这里的单个字母
[0-9a-fA-F]
:用 - 可以指明一个连续的字符范围
\d
:十进制数字,相当于[0-9],其他进制不行
\D
:非数字,相当于[^0-9],其他进制也不包括
\w
:任何词汇的字符,相当于[a-zA-Z_0-9]
\W
:非词汇字符,相当于[^a-zA-Z_0-9]
\s
:所有的空白字符换页,换行,回车,Tab,纵向Tab,相当于[ \f\n\r\t\v]
\S
:所有的非空白字符,相当于[^ \f\n\r\t\v]
不熟悉的知识点:匿名函数Lambda
匿名函数,顾名思义就是不需要具体定义函数名的函数,仅单条语句组成,该语句的结果就是返回值。它是通过lambda
关键字定义的,这个关键字没有别的含义,仅仅是说“我们正在声明的是一个匿名函数”。
lambda函数比编写完整的函数要少输入很多字,并且清晰很多。例如:
def func(x):return x*2
y = func(x)
__________________________y = lambda x: x * 2
sort()
函数和sorted()
函数区别
sort()
函数和sorted()
函数,两个函数均为排序,不同的是,sort()
函数改变原来列表,而sorted()
函数不改变原来列表,且reverse=False
正序,reverse=True
反序。
sorted()
函数和lambada()
函数结合
#根据不同字母个数排序
#foo两个字母,aaaa一个字母
strings = ['foo', 'card', 'bar', 'aaaa', 'abab']#list(x)把foo变成列表['f','o','o'],把字符串变为列表
#set()转化为集合并去掉重复字符,为 {'f', 'o'}
#len()得到长度strings.sorted(key = lambda x:len(set(list(x))))
不熟悉的知识点:柯里化 —— 部分参数的应用
其实就是从已有函数衍生新的函数