python第六講:組合數(shù)類型

六寇仓、組合數(shù)類型

6.1 集合類型及操作

6.1.1 集合類型定義

定義:集合是多個元素的無序組合

特點:集合類型與數(shù)學中的集合概念一致橱赠,幾何元素之間無序厚棵、每個元素唯一蕉世、不存在相同元素,幾何元素不可更待婆硬、不能存在可變數(shù)據(jù)類型狠轻。

非可變數(shù)據(jù)類型:整數(shù)、浮點數(shù)彬犯、復數(shù)向楼、字符串類型、元組類型等

表示:{},元素間用谐区,分隔

建立:{} 或者set{}蜜自,建立空集合必須使用set{}

舉例:

A={"python",123,("python",123)}
{123,'pytnon',('python',123)}
B=set("pypy123")
{'1','p','2','3','y'}
C=("python",123,"python",123)
('python',123)

6.1.2 集合操作符

基本操作符:

操作符 含義
S|T
S-T
S$T
S^T
S<=T或S<T 判斷S和T子集關系
S>=T或S>T 判斷S和T包含關系

增強操作符:

操作符 含義
S|=T 利用并運算結果更新集合S
S-=T 利用差運算結果更新集合S
S$=T 利用交運算結果更新集合S
S^=T 利用補運算結果更新集合S

實例:

A={"P","Y",123}
B=set("pypy123")

A-B
{123}

B-A
{'3','1','2'}

A&B

{'p','y'}

A|B

{'1','p','2','y','3',123}

A^B

{'2',123,'3','1'}

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 隨機返回S的一個元素戈鲁,更新S,若S 為空,則產(chǎn)生KeyError異常
S.copy 返回集合S的一個副本
len(S) 返回集合S的元素個數(shù)
x in S 判斷S 中元素x嘹叫,x在集合S中返回Ture,否則返回False
x not in S 判斷S 中元素x婆殿,x不在集合S中返回Ture,否則返回False
set(x) 將其他類型變量x轉化為集合類型
A={"p","y",123}
for item in A:
    print(item,end="")

p123y

try:
    while True:
        print(A.pop(),end="")
expece:
    pass

A

set()

6.1.4 集合應用場景

1.包含關系比較:

"p" in {"p","y",123}

True

{"p","y"}>={"p","y",123}

False

2.數(shù)據(jù)去重

ls=["p","p","y","y",123]
s=set(ls)                #利用幾何元素無重復特點

{'p','y',123}

ls=["p","p","y","y",123]
s=set(ls)                #利用幾何元素無重復特點
lt=list(s)

['p','y',123]

6.2序列類型及操作

6.2.1 序列類型定義

定義:序列是具有先后關系的一組元素

特點:序列是一維元素向量,元素類型可以不同罩扇,元素可以相同:類似數(shù)學元素序列:元素間有序列引導婆芦,通過下標訪問序列的特定元素

序列是一個基類類型,衍生為:字符串類型喂饥、元組類型消约、列表類型

序號的定義:正向遞增序號、反向遞減序號员帮,與字符串中相似或粮。

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

操作符及應用 描述
x in S 判斷S 中元素x,x在集合S中返回Ture,否則返回False
x not in S 判斷S 中元素x捞高,x不在集合S中返回Ture,否則返回False
s+t 連接兩個序列s或t
sn 或 ns 將序列s復制n次
s[i] 索引氯材,返回s中的第i個元素,i是序列的序號
s[i:j]或s[i:j:k] 切片渣锦,返回s中第i到j以k為步長的元素子序列
ls=["python",123,.io"]
ls=[::-1]

['.io',123,'python']

s="python123.io"
ls[::-1]

'oi.321nohtyp'

序列類型的通用函數(shù)和方法:

函數(shù)和方法 描述
len(s) 返回序列s的長度
min(s) 返回序列s的最小元素,s中元素需要可比較
max(s) 返回序列s的最大元素氢哮,s中元素需要可比較
s.index(x)或s.index(x,i,j) 返回序列s從i開始到j位置中第一次出現(xiàn)x的位置
s.count(x) 返回序列s中出現(xiàn)x的總次數(shù)
ls=["python",123,".io"]
len(ls)

3

s="python123.io"
max(s)

'y'

6.2.3 元組類型及操作

定義:元組類型是序列類型的一種擴展袋毙,一旦創(chuàng)建就不能修改

形式:元組使用()或者tuple()創(chuàng)建,元素之間用逗號分隔:小括號使不使用都可以冗尤。

舉例:

creature="cat","dog","tiger","human"
creature

('cat','dog','tiger','human')

creature="cat","dog","tiger","human"
color=(0x001100,"bule",creature)
color

(4352,'bule',('cat','dog','tiger','human'))

元組類型繼承序列類型全部通用操作:操作符听盖、處理函數(shù)、處理方法

元組類型創(chuàng)建后不能修改生闲,因此沒有特殊操作

creature="cat","dog","tiger","human"
creature[::-1]

('human','tiger',dog','cat')

creature="cat","dog","tiger","human"
color=(0x001100,"bule",creature)
color[-1][2]

'tiger'

6.2.4 列表類型及操作

定義:列表是序列類型的一種擴展媳溺,創(chuàng)建后其中的元素可以被隨意修改

使用:[]或者list()創(chuàng)建月幌,元素間可以用逗號隔開碍讯,列表中各元素類型可不同,無長度限制

ls=["cat","dog","tiger",1024]
ls

['cat','dog','tiger',1024]

ls=["cat","dog","tiger",1024]
lt=is.
lt

['cat','dog','tiger',1024]

列表類型操作函數(shù)及其方法:

函數(shù)或方法 描述
ls[i]=x 替換列表ls第i個元素為x
ls[i:j:k]=lt 用列表il替換is切片后所對應元素子列表
del ls [i] 刪除列表is中第i個元素
del ls[i:j:k] 刪除列表is中第i到第j以k為步長的元素
ls+=lt 更新列表ls扯躺,將列表lt元素增加到列表ls中
ls*=n 更新列表ls捉兴,其元素重復n次
ls=["cat","dog","tiger",1024]
ls=[1:2]=1,2,3,4

['cat',1,2,3,4,'tiger',1024]

修改列表:

函數(shù)或方法 描述
ls.append(x) 在列表s最后增加一個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)的第一個元素x刪除
ls.reverse() 將列表ls中元素反轉

練習:


image.png

6.2.5 序列類型應用場景

序列:元組和列表兩種重要類型

應用場景:元組用于元素不改變的場景录语,更多用于固定搭配場景:列表更加靈活倍啥,它是最常用的序列類型

作用:表達一組有序數(shù)據(jù)并且處理問題;數(shù)據(jù)保護

元素遍歷:

for item in ls:
    <語句塊>

元組類型:

for item in tp:
    <語句塊>

數(shù)據(jù)保護:不希望數(shù)據(jù)被程序所改變澎埠,轉換成元組類型

ls=["cat","dog","tiger",1024]
lt=tuple(ls)
lt

('cat',1,2,3,4,'tiger',1024)

6.3 基本統(tǒng)計值計算

6.3.1 問題分析

基本統(tǒng)計值需求:給出一組數(shù)并且理解

定義:總個數(shù)虽缕、求和、平均值蒲稳、方差氮趋、中位數(shù)...

總個數(shù):len()

求和:for...in

平均值:求和/總個數(shù)

方差:各數(shù)據(jù)與平均數(shù)差的平方的和的平均數(shù)

中位數(shù):排序,然后... 奇數(shù)找中間一個江耀,偶數(shù)中間兩個的平均

6.3.2 問題實例

#CalStatisticsV1.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)))

6.4 字典類型及操作

6.4.1 字典類型定義

映射:是一種索引和數(shù)據(jù)的對應關系剩胁,也是鍵和值的對應關系。

映射類型:由用戶數(shù)據(jù)為定義索引

字典類型:數(shù)據(jù)的組織與表達的一種新的形態(tài)祥国,是映射的體現(xiàn)昵观。

鍵值對:鍵是數(shù)據(jù)索引的擴展,字典是鍵值對的集合舌稀,鍵值對間無序啊犬。

生成:{}和dict()創(chuàng)建,鍵值對之間用冒號:表示

舉例:{<鍵1>:<值1>,<鍵2>:<值2>,...,<鍵n>:<值n>}

在字典變量中壁查,通過鍵獲得值:

<字典變量>={<鍵1>:<值1>,...,<鍵n>:<值n>}

<值>=<字典變量>[<鍵>]

<字典變量>[<鍵>]=<值>

用[]來向字典中增加或者索引鍵值對

舉例:

d={"中國":"北京","美國":"華盛頓","法國":"巴黎"}

d["中國"]

'北京'

生成空字典:

de={};type(de)

<class 'dict'>

type(x) 返回變量x的類型

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

函數(shù) 描述
del d[k] 刪除字典d中鍵k對應的數(shù)據(jù)值
k in d 判斷k是否在字典d中椒惨,如果在返回True,不在返回False
d.keys() 返回字典d中所有的鍵信息
d.values() 返回字典d中所有的值信息
d.items() 返回字典d中所有的鍵值對信息

舉例:

d={"中國":"北京","美國":"華盛頓","法國":"巴黎"}
"中國" in d

True

d={"中國":"北京","美國":"華盛頓","法國":"巴黎"}
d.keys()

dict_keys(['中國','美國','法國])

d={"中國":"北京","美國":"華盛頓","法國":"巴黎"}
d.values()

dict_values(['北京','華盛頓','巴黎'])

函數(shù) 描述
d.get(k,<default>) 鍵k存在潮罪,則返回相應值康谆,不存在則返回<default>值
d.pop(k,<default>) 鍵k存在领斥,則取出相應值,不存在則返回<default>值
d.popitem() 隨機從字典里取出一對鍵值對沃暗,以元組形式返回
d.clear() 刪除所有的鍵值對
len(d) 返回字典d中的元素個數(shù)

實例:

d={"中國":"北京","美國":"華盛頓","法國":"巴黎"}
d.get("中國"月洛,"伊斯蘭堡")

'北京'

d={"中國":"北京","美國":"華盛頓","法國":"巴黎"}
d.get("巴黎","伊斯蘭堡")

'伊斯蘭堡'

d={"中國":"北京","美國":"華盛頓","法國":"巴黎"}
d.popitem()

('中國','北京')
練習:


image.png

6.4.3字典應用場景

1.映射的表達:映射無處不在孽锥,鍵值對也無處不在嚼黔,統(tǒng)計數(shù)據(jù)出現(xiàn)的次數(shù),數(shù)據(jù)是鍵惜辑,次數(shù)是值唬涧。

字典的主要作用:表達鍵值對的數(shù)據(jù)進而操作他們

2.元素遍歷:

for k in d:

? <語句塊>

6.5 jieba庫

6.5.1 jieba庫簡介

定義:jieba庫是優(yōu)秀的第三方中文分詞庫,需要額外安裝

安裝方法:(cmd命令下)pip install jieba

作用:利用中文詞庫確定漢字間的關聯(lián)概率盛撑,字間概率大的組成詞組碎节,形成分詞效果,用戶還可以向其中自定義的添加詞組抵卫。

6.5.2 jieba庫使用說明

分類:精確模式狮荔、全模式、搜索引擎模式

精確模式:將詞組精確的分開介粘,不存在冗余單詞

全模式:將所有可能的詞組都掃描出來殖氏,有冗余

搜索引擎模式:在精確模式的基礎上,將長詞再次切分

函數(shù) 描述
jieba.lcut(s) 精確模式姻采,返回一個列表類型的分詞結果
jieba.lcut(s,cut_all=True) 全模式雅采,返回一個列表類型的分詞結果,有冗余
jieba.lcut_for_search(s) 搜索引擎模式慨亲,返回一個列表類型的分詞結果婚瓜,有冗余
jieba.add_word(w) 向分詞詞典中添加新詞

舉例:

jieba.lcut("中國是一個偉大的國家")

['中國','是','一個','偉大','的','國家']

jieba.lcut("中國是一個偉大的國家",cut_all=True)

['中國','國是','一個','偉大','的','國家']

jieba.lcut_for_search("中華人民共和國是偉大的")

['中華','華人','人民','共和','共和國','中華人民共和國','是','偉大','的']

jieba.add_word("蟒蛇語言")

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

需求:一篇文章中出現(xiàn)的詞的頻率統(tǒng)計

分類:英文文本,中文文本

舉例:

英文:哈姆雷特(hamlet)

中文:三國演義(threekingdoms)

6.6.1 哈姆雷特實例

#CalHamletV1.py
def getText():
    txt=open("hamlet.txt","r").read()
    txt=txt.lower()
    for ch in '`~!@#$%^&*()_+={}[]|\?/";:<>,./':
        txt=txt.replace(ch,"")
    return txt
hamletTxt=getText()
words=hamletTxt.split()
counts={}
for word in words:
    counts[word]=count.get(wora,0)+1
items=list(counts,items())
items.sort(key=lambda x:x[1],reverse=True)
for i in range (10):
    word,count=item[i]
    print("{0:<10}{1:>5}".format(word.count))

6.6.2 三國演義實例

#CalThreeKingdomsV1.py
import jieba
txt=open("threekingdoms.txt","r",encoding="utf-8").read()
words=jieba.lcut(txt)
counts={}
for word in words:
    if len(word) == 1:
        continue
    else:
        counts[word]=count.get(wora,0)+1
items=list(counts,items())
items.sort(key=lambda x:x[1],reverse=True)
for i in range (15):
    word,count=item[i]
    print("{0:<10}{1:>5}".format(word.count))

6.6.3 三國演義修改版實例

#CalThreeKingdomsV1.py
import jieba
txt=open("threekingdoms.txt","r",encoding="utf-8").read()
excludes={"將軍","二人","荊州","卻說","不能","如此"}
words=jieba.lcut(txt)
counts={}
for word in words:
    if len(word) == 1:
        continue
    elif word =="諸葛亮" or word =="孔明曰":
        rword="孔明"
    elif word =="關公" or word =="云長曰":
        rword="關羽"
    elif word =="玄德" or word =="玄德曰":
        rword="劉備"
    elif word =="孟德" or word =="孟德曰":
        rword="曹操"
    else:
        rword=word
        counts[word]=count.get(wora,0)+1
items=list(counts,items())
items.sort(key=lambda x:x[1],reverse=True)
for i in range (15):
    word,count=item[i]
    print("{0:<10}{1:>5}".format(word.count))
最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末巡雨,一起剝皮案震驚了整個濱河市闰渔,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌铐望,老刑警劉巖冈涧,帶你破解...
    沈念sama閱讀 206,723評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異正蛙,居然都是意外死亡督弓,警方通過查閱死者的電腦和手機手报,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,485評論 2 382
  • 文/潘曉璐 我一進店門烁挟,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人踏揣,你說我怎么就攤上這事锻全】裉粒” “怎么了录煤?”我有些...
    開封第一講書人閱讀 152,998評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長荞胡。 經(jīng)常有香客問我妈踊,道長,這世上最難降的妖魔是什么泪漂? 我笑而不...
    開封第一講書人閱讀 55,323評論 1 279
  • 正文 為了忘掉前任廊营,我火速辦了婚禮,結果婚禮上萝勤,老公的妹妹穿的比我還像新娘露筒。我一直安慰自己,他們只是感情好敌卓,可當我...
    茶點故事閱讀 64,355評論 5 374
  • 文/花漫 我一把揭開白布慎式。 她就那樣靜靜地躺著,像睡著了一般假哎。 火紅的嫁衣襯著肌膚如雪瞬捕。 梳的紋絲不亂的頭發(fā)上鞍历,一...
    開封第一講書人閱讀 49,079評論 1 285
  • 那天舵抹,我揣著相機與錄音,去河邊找鬼劣砍。 笑死惧蛹,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的刑枝。 我是一名探鬼主播香嗓,決...
    沈念sama閱讀 38,389評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼装畅!你這毒婦竟也來了靠娱?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 37,019評論 0 259
  • 序言:老撾萬榮一對情侶失蹤掠兄,失蹤者是張志新(化名)和其女友劉穎像云,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蚂夕,經(jīng)...
    沈念sama閱讀 43,519評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡迅诬,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,971評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了婿牍。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片侈贷。...
    茶點故事閱讀 38,100評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖等脂,靈堂內(nèi)的尸體忽然破棺而出俏蛮,到底是詐尸還是另有隱情撑蚌,我是刑警寧澤,帶...
    沈念sama閱讀 33,738評論 4 324
  • 正文 年R本政府宣布搏屑,位于F島的核電站锨并,受9級特大地震影響,放射性物質發(fā)生泄漏睬棚。R本人自食惡果不足惜第煮,卻給世界環(huán)境...
    茶點故事閱讀 39,293評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望抑党。 院中可真熱鬧包警,春花似錦、人聲如沸底靠。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,289評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽暑中。三九已至壹瘟,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間鳄逾,已是汗流浹背稻轨。 一陣腳步聲響...
    開封第一講書人閱讀 31,517評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留雕凹,地道東北人殴俱。 一個月前我還...
    沈念sama閱讀 45,547評論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像枚抵,于是被迫代替她去往敵國和親线欲。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,834評論 2 345

推薦閱讀更多精彩內(nèi)容