文章目錄
- 利用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))))
不熟悉的知識點:柯里化 —— 部分參數的應用
其實就是從已有函數衍生新的函數