Jupyter筆記-Python語法基礎(chǔ)(U.6)

為mooc網(wǎng)站的北京理工大學(xué)的 嵩天 、黃天羽 铐拐、禮欣 三位老師的課程筆記耻姥。

6 組合數(shù)據(jù)類型

6.1 集合類型及操作
6.2 序列類型及操作(元組類型、列表類型)
6.3 實例9:基本統(tǒng)計值計算
6.4 字典類型及操作
6.5 模塊5:jieba庫的使用
6.6 實例10:文本詞頻統(tǒng)計

6.1 集合類型及操作

集合類型定義跨扮;
集合操作符;
集合處理方法验毡;
集合類型應(yīng)用場景衡创;

6.1.1 集合定義

集合是不可變數(shù)據(jù)類型,每個元素唯一米罚,不存在相同元素钧汹,元素之間無順序丈探,用大括號{}表示录择,元素間用逗號分隔,建立集合用{}或set()碗降,<mark>建立空集合時必須使用set()</mark>隘竭;

A = {"python", 123, ("python", 123)}:{123,'python',('python',123)}; #使用{}建立集合
B = set("pypy123"):{'1','p','2','3','y'}; #使用set()建立集合

6.1.2 集合操作符

并,差讼渊,交动看,補(bǔ)

操作符及應(yīng)用 描述
S | T 返回一個新集合,包括在集合S和T中的所有元素
S - T 返回一個新集合爪幻,包括在集合S但不在T中的元素
S & T 返回一個新集合菱皆,包括同時在集合S和T中的元素
S ^ T 返回一個新集合须误,包括集合S和T中的非相同元素
S <= T 或 S < T 返回True/False,判斷S和T的子集關(guān)系
S >= T 或 S > T 返回True/False仇轻,判斷S和T的包含關(guān)系
4個增強(qiáng)操作符及應(yīng)用 描述
S |= T 更新集合S京痢,包括在集合S和T中的所有元素
S -= T 更新集合S,包括在集合S但不在T中的元素
S &= T 更新集合S篷店,包括同時在集合S和T中的元素
S ^= T 更新集合S祭椰,包括集合S和T中的非相同元素

6.1.3 集合處理方法

操作函數(shù)或方法 描述
S.add(x) 如果x不在集合S中,將x增加到S
S.discard(x) 移除S中元素x疲陕,如果x不在集合S中方淤,不報錯
S.remove(x) 移除S中元素x,如果x不在集合S中蹄殃,產(chǎn)生KeyError異常
S.clear() 移除S中所有元素
S.pop() 隨機(jī)返回S的一個元素携茂,更新S,若S為空產(chǎn)生KeyError異常
S.copy(x) 返回集合S的一個副本
len(S) 返回集合S的元素個數(shù)
x in S 判斷S中元素x诅岩,x在集合S中邑蒋,返回True,否則返回False
x not in S 判斷S中元素x按厘,x不在集合S中医吊,返回True,否則返回False
set(x) 將其他類型變量x轉(zhuǎn)變?yōu)榧项愋?/td>

6.1.4 集合類型應(yīng)用場景

  • 包含關(guān)系比較逮京;
  • 數(shù)據(jù)去重:集合類型所有元素?zé)o重復(fù)卿堂;
    ls = ["p", "p", "y", "y", 123] s = set(ls) #利用了集合無重復(fù)元素的特點 lt = list(s) #將集合轉(zhuǎn)換為列表

6.2 序列類型及操作

序列類型定義;序列類型處理函數(shù)及方法懒棉;元組類型及操作草描;列表類型及操作;序列類型應(yīng)用場景策严;

6.2.1 定義

  1. 序列是具有先后關(guān)系的一組元素:是一維元素向量穗慕,元素類型可不同;類似數(shù)學(xué)元素妻导;元素間由序號引導(dǎo)逛绵,通過小標(biāo)訪問序列的特定元素;
  2. 序列是一個基類類型:里面有字符串類型倔韭,元組類型术浪,列表類型;
  3. 反向遞減寿酌,正向遞增胰苏;

6.2.2 處理函數(shù)及方法

操作符及應(yīng)用 描述
x in S 如果x是序列S的元素,返回True醇疼,否則返回False
x not in S 如果x不是S中硕并,返回True法焰,否則返回False
s + t 連接兩個序列s和t
sn 或 ns 將序列s復(fù)制n次
s[i] 索引,返回s中的第i個元素倔毙,i是序列的序號
s[i:j]或s[i:j:k] 切片壶栋,返回序列s中第i到j(luò)以k為步長的元素子序列

5個函數(shù)和方法

函數(shù)和方法 描述
len(s) 返回序列s的長度
min(s) 返回序列s的最小元素,s中元素需要可比較
max(s) 返回序列s的最大元素普监,s中元素需要可比較
s.index(x)或s.index(x,i,j) 返回序列s從i開始到j(luò)位置中第一次出現(xiàn)元素x的位置

6.2.3 元組類型及操作

  • 元組是序列類型的一種擴(kuò)展:一旦創(chuàng)建就不能被修改贵试;使用小括號()或tuple()創(chuàng)建,元素間用逗號分隔凯正;可使用小括號或不使用小括號毙玻;
  • 元組繼承序列類型的全部通用操作:沒有特殊操作;

6.2.4 列表類型及操作

  • 列表是序列類型廊散,創(chuàng)建后可隨意修改桑滩;使用[]或list()創(chuàng)建,元素間用逗號分隔允睹;

操作函數(shù)和方法

函數(shù)或方法 描述
ls[i] = x 替換列表ls第i元素為x
ls[i:j:k] = lt 用列表lt替換ls切片后所對應(yīng)元素子列表
del ls[i] 刪除列表ls中第i元素
del ls[i:j:k] 刪除列表ls中第i到第j以k為步長的元素
ls += lt 更新列表ls运准,將列表lt元素增加到列表ls中
ls *= n 更新列表ls,其元素重復(fù)n次
---------------- --------------------------------------------
ls.append(x) 在列表ls最后增加一個元素x
ls.clear() 刪除列表ls中所有元素
ls.copy() 生成一個新列表缭受,賦值ls中所有元素
ls.insert(i,x) 在列表ls的第i位置增加元素x
ls.pop(i) 將列表ls中第i位置元素取出并刪除該元素
ls.remove(x) 將列表ls中出現(xiàn)的第一個元素刪除
ls.reverse() 將列表ls中的元素反轉(zhuǎn)

6.2.5 應(yīng)用場景

  • 數(shù)據(jù)表示:元組用于元素不改變的應(yīng)用場景胁澳,更多用于固定搭配場景;列表更加靈活米者,最常用的序列類型韭畸;表示一組有序數(shù)據(jù);
  • 元素遍歷:for item in ls:;for item in tp:;
  • 數(shù)據(jù)保護(hù):不希望數(shù)據(jù)被程序所改變蔓搞,轉(zhuǎn)換成元組類型(tuple())胰丁;
# 6.1.3.py
A = {"python", 123, ("python", 123)}
try:
    while True:
        print(A.pop(),end="")
except:
    pass

123python('python', 123)

6.3 基本數(shù)據(jù)統(tǒng)計值計算

需求:給出一組數(shù),對它們有個概要理解喂分;

  • 總個數(shù):len()
  • 求和:for ... in
  • 平均值:求和/總個數(shù)
  • 方差:各數(shù)據(jù)與平均數(shù)差的平方的和的平均數(shù)
  • 中位數(shù):排序锦庸,求中間值
# 6.3CalStatisticsV1.py
def getNum():      #獲取用戶輸入
    nums = []
    iNumStr = input("請輸入數(shù)字(回車退出):")
    while iNumStr != "":
        nums.append(eval(iNumStr))
        iNumStr = input("請輸入數(shù)字(回車退出):")
    return nums
def mean(numbers):    #計算平均值
    s = 0.0
    for num in numbers:
        s = s + num
    return s/len(numbers)
def dev(numbers, mean):  #計算方差
    sdev = 0.0
    for num in numbers:
        sdev = sdev + (num - mean)**2
    return pow(sdev / (len(numbers)-1),0.5)
def median(numbers):    #計算中位數(shù)
    sorted(numbers)     #排序
    size = len(numbers)
    if size % 2 == 0:
        med = (numbers[size//2-1] + numbers[size//2])/2
    else:
        med = numbers[size//2]
    return med
n = getNum()
m = mean(n)
print("平均值:{},方差:{:.2},中位數(shù):{}".format(m,dev(n,m),median(n)))
請輸入數(shù)字(回車退出):1
請輸入數(shù)字(回車退出):2
請輸入數(shù)字(回車退出):3
請輸入數(shù)字(回車退出):4
請輸入數(shù)字(回車退出):5
請輸入數(shù)字(回車退出):
平均值:3.0,方差:1.6,中位數(shù):3

6.4 字典類型及操作

字典類型定義,字典處理函數(shù)及方法蒲祈,字典類型應(yīng)用場景

6.4.1 定義

  • 字典類型是“映射”的體現(xiàn):鍵值對甘萧,鍵是數(shù)據(jù)索引的擴(kuò)展;字典是鍵值對的集合讳嘱,鍵值對之間無序幔嗦;采用大括號{}dict()創(chuàng)建,鍵值對用冒號:表示沥潭;type(x):返回變量x的類型;

6.4.2 處理函數(shù)及方法

函數(shù)或方法 描述
del d[k] 刪除字典d中鍵k對應(yīng)的數(shù)據(jù)值
k in d 判斷鍵k是否在字典d中嬉挡,如果在返回True钝鸽,否則False
d.keys() 返回字典d中所有的鍵信息
d.values() 返回字典d中所有的值信息
d.get(k,<default>) 鍵k存在汇恤,則返回相應(yīng)值,不在則返回<default>值
d.pop(k,<default>) 鍵k存在拔恰,則取出相應(yīng)值因谎,不在則返回<default>值
d.popitem() 隨機(jī)從字典d中取出一個鍵值對,以元組形式返回
d.clear() 刪除所有的鍵值對
len(d) 返回字典d中元素的個數(shù)

6.4.3 應(yīng)用場景

映射的表達(dá)颜懊;表達(dá)鍵值對數(shù)據(jù)财岔,進(jìn)而操作它們;

6.5 jieba庫介紹

6.5.1 概述

中文分詞第三方庫河爹;

6.5.2 jieba分詞的三種模式

  • 精確模式:把文本精確的切分開匠璧,不存在冗余單詞;全模式:把文本中所有可能的詞語都掃描出來咸这,有冗余夷恍;搜索引擎模式:在精確模式基礎(chǔ)上,對長詞再次切分媳维;
  • 常用函數(shù)
函數(shù) 描述 舉例
jieba.lcut(s) 精確模式酿雪,返回一個列表類型的分詞結(jié)果 jieba.lcut("中國是一個偉大的國家"):['中國','是','一個','偉大','的','國家']
jieba.lcut(s,cut_all=True) 全模式,返回一個列表類型的分詞結(jié)果侄刽,存在冗余 jieba.lcut("中國是一個偉大的國家",cut_all=True):['中國','國是','一個','偉大','的','國家']
jieba.lcut_for_search(s) 搜索引擎模式指黎,返回一個列表類型的分詞結(jié)果,存在冗余 jieba.lcut_for_search("中華人民共和國是偉大的"):['中華','華人','人民','共和','共和國','中華人民共和國','是','偉大','的']
jieba.add_word(w) 向分詞詞典增加新詞w jieba.add_word("蟒蛇語言")

6.6 實例10:文本詞頻統(tǒng)計

6.6.1 問題分析

在英文中文中州丹,出現(xiàn)哪些詞袋励,出現(xiàn)多少次?

6.6.2 hamlet英文詞頻統(tǒng)計

  • CalHamletV1.py

6.6.3 三國演義人物出場統(tǒng)計

  • CalThreeKingdomsV1.py
  • CalThreeKingdomsV2.py
# CalHamletV1.py
def getText():     #獲取文本当叭,歸一化處理文本
    txt = open("E:\python\learn\hamlet.txt","r").read()   #打開文件
    txt = txt.lower()     #將所有大寫字母變成小寫
    for ch in '!"#$%&()*+,-./:;<=>?@[\\]^_{|}~"':   #將文本中特殊符號替換為空格
        txt = txt.replace(ch," ")
    return txt
hamletTxt = getText()
words = hamletTxt.split()    #采用空格將字符串中的信息進(jìn)行分隔茬故,以列表形式返回給變量
counts = {}
for word in words:
    counts[word] = counts.get(word,0) + 1   #統(tǒng)計字?jǐn)?shù)
items = list(counts.items())    #將字典類型轉(zhuǎn)換成列表類型
items.sort(key=lambda x:x[1], reverse=True)    #對一個列表按照鍵值對的2個元素的第2個元素進(jìn)行排序,排序方式為由大到小的倒排
for i in range(10):    #將前10位字?jǐn)?shù)打印輸出
    word, count = items[i]
    print("{0:<10}{1:>5}".format(word,count))
the         137
to           99
he           71
and          65
hamlet       57
of           52
his          52
was          49
that         36
king         31
#CalThreeKingdomsV1.py   三國演義人物出場文本統(tǒng)計
import jieba
txt = open("E:/python/learn/threekingdoms.txt","r",encoding="utf-8").read()
words = jieba.lcut(txt)
counts = {}
for word in words:
    if len(word) == 1:
        continue
    else:
        counts[word] = counts.get(word,0) + 1
items = list(counts.items())
items.sort(key=lambda x:x[1],reverse=True)
for i in range(15):
    word, count = items[i]
    print("{0:<10}{1:>5}".format(word, count))
曹操          934
孔明          831
將軍          761
卻說          647
玄德          569
關(guān)公          509
丞相          488
二人          465
不可          435
荊州          420
孔明曰         385
玄德曰         383
不能          383
如此          376
張飛          348
#CalThreeKingdomsV2.py   三國演義人物出場文本統(tǒng)計
import jieba
txt = open("E:/python/learn/threekingdoms.txt","r",encoding="utf-8").read()
excludes = {"將軍","卻說","荊州","二人","不可","不能","如此"}   #構(gòu)建排除集合
words = jieba.lcut(txt)
counts = {}
for word in words:
    if len(word) == 1:
        continue
    elif word =="諸葛亮" or word =="孔明曰":
        rword = "孔明"
    elif word =="關(guān)公" or word =="云長":
        rword = "關(guān)羽"
    elif word =="玄德" or word =="玄德曰":
        rword = "劉備"
    elif word =="孟德" or word =="丞相":
        rword = "曹操"
    else:
        rword = word
    counts[rword] = counts.get(rword,0) + 1
for word in excludes:
    del counts[word]
items = list(counts.items())
items.sort(key=lambda x:x[1],reverse=True)
for i in range(15):
    word, count = items[i]
    print("{0:<10}{1:>5}".format(word, count))
曹操         1429
孔明         1373
劉備         1223
關(guān)羽          779
張飛          348
商議          344
如何          336
主公          327
軍士          310
呂布          300
左右          291
軍馬          288
次日          270
引兵          269
大喜          265

點贊蚁鳖,關(guān)注磺芭,收藏??,?醉箕,??點贊钾腺,關(guān)注,收藏??讥裤,?放棒,??點贊,關(guān)注己英,收藏??间螟,?,??
????????????????????????????????????????????????????????????????
????????????????????????????????????????????????????????????????

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市厢破,隨后出現(xiàn)的幾起案子荣瑟,更是在濱河造成了極大的恐慌,老刑警劉巖摩泪,帶你破解...
    沈念sama閱讀 217,826評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件笆焰,死亡現(xiàn)場離奇詭異,居然都是意外死亡见坑,警方通過查閱死者的電腦和手機(jī)嚷掠,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,968評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來荞驴,“玉大人不皆,你說我怎么就攤上這事〈魇” “怎么了粟焊?”我有些...
    開封第一講書人閱讀 164,234評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長孙蒙。 經(jīng)常有香客問我项棠,道長,這世上最難降的妖魔是什么挎峦? 我笑而不...
    開封第一講書人閱讀 58,562評論 1 293
  • 正文 為了忘掉前任香追,我火速辦了婚禮,結(jié)果婚禮上坦胶,老公的妹妹穿的比我還像新娘透典。我一直安慰自己,他們只是感情好顿苇,可當(dāng)我...
    茶點故事閱讀 67,611評論 6 392
  • 文/花漫 我一把揭開白布峭咒。 她就那樣靜靜地躺著,像睡著了一般纪岁。 火紅的嫁衣襯著肌膚如雪凑队。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,482評論 1 302
  • 那天幔翰,我揣著相機(jī)與錄音漩氨,去河邊找鬼。 笑死遗增,一個胖子當(dāng)著我的面吹牛叫惊,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播做修,決...
    沈念sama閱讀 40,271評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼霍狰,長吁一口氣:“原來是場噩夢啊……” “哼抡草!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起蚓耽,我...
    開封第一講書人閱讀 39,166評論 0 276
  • 序言:老撾萬榮一對情侶失蹤渠牲,失蹤者是張志新(化名)和其女友劉穎旋炒,沒想到半個月后步悠,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,608評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡瘫镇,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,814評論 3 336
  • 正文 我和宋清朗相戀三年鼎兽,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片铣除。...
    茶點故事閱讀 39,926評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡谚咬,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出尚粘,到底是詐尸還是另有隱情择卦,我是刑警寧澤,帶...
    沈念sama閱讀 35,644評論 5 346
  • 正文 年R本政府宣布郎嫁,位于F島的核電站秉继,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏泽铛。R本人自食惡果不足惜尚辑,卻給世界環(huán)境...
    茶點故事閱讀 41,249評論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望盔腔。 院中可真熱鬧杠茬,春花似錦、人聲如沸弛随。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,866評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽舀透。三九已至栓票,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間盐杂,已是汗流浹背逗载。 一陣腳步聲響...
    開封第一講書人閱讀 32,991評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留链烈,地道東北人厉斟。 一個月前我還...
    沈念sama閱讀 48,063評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像强衡,于是被迫代替她去往敵國和親擦秽。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,871評論 2 354