利用Python3實(shí)現(xiàn)統(tǒng)計(jì)大量單詞中各字母出現(xiàn)的次數(shù)和頻率的方法
首先以只讀方式打開單詞文件,利用列表推導(dǎo)式創(chuàng)建兩個(gè)列表
列表sta記錄各單詞出現(xiàn)的次數(shù),列表freq記錄各單詞出現(xiàn)的頻率
f = open('5500詞.txt','r',encoding='utf-8')
sta = [0 for i in range(26)]
freq = [0 for i in range(26)]
單詞格式如下所示:
a [ei] art.一(個(gè));每一(個(gè));(同類事物中)任一個(gè)
abandon [ə'bændən] vt.離棄,丟棄;遺棄,拋棄;放棄
abdomen [æb'dəumen] n.腹,下腹(胸部到腿部的部分)
abatement [ə'beitmənt] n.減(免)稅,打折扣,沖銷
abide [ə'baid] vi.(abode,abided)(by)遵守;堅(jiān)持;vt.忍受,容忍
每行一個(gè)單詞,所以我們選擇按行讀取文件
for i in range(5500): buf = f.readline()
然后依次統(tǒng)計(jì)每個(gè)字符串中的字母個(gè)數(shù),注意大寫字母也要統(tǒng)計(jì)(后面的字母省略)
for j in buf:
if j == 'a' or j == 'A':
sta[0] = sta[0] + 1
elif j == 'b' or j == 'B':
sta[1] = sta[1] + 1
注意到每個(gè)單詞后都有音標(biāo),所以遇到 中括號" [ "時(shí)停止計(jì)數(shù)
if j == '[':
break
然后每五個(gè)一行,依次輸出各個(gè)單詞出現(xiàn)的次數(shù),將print函數(shù)中的end參數(shù)由默認(rèn)換行改成幾個(gè)空格,使輸出更格式化。字母利用ASCII碼輸出
print('5498個(gè)詞匯中,各字母出現(xiàn)的次數(shù)分別為:\n')
asc = 97
for i in range(26):
if i < 25:
print("%c" % asc,':',sta[i],end=' ')
if (i + 1) % 5 == 0:
print('\n')
else:
print("%c" % asc,':',sta[i])
asc = asc + 1
利用一個(gè)for遍歷計(jì)算出所有字母數(shù)量的總和
sum = 0 for i in sta: sum = sum + i
利用一個(gè)for遍歷計(jì)算出各字母出現(xiàn)的頻率,注意到Python中計(jì)算出的頻率會自動保留17位小數(shù),為了方便查看,使用round()函數(shù)保留四位小數(shù),值得注意的是,使用round()函數(shù)會自動去掉數(shù)字末尾的0
for i in range(26): freq[i] = round(sta[i] / sum,4)
再以每五個(gè)一行,依次輸出各個(gè)單詞出現(xiàn)的頻率,將print函數(shù)中的end參數(shù)由默認(rèn)換行改成幾個(gè)空格,使輸出更格式化。字母利用ASCII碼輸出。
print('各字母出現(xiàn)的頻率分別為:\n')
for i in range(26):
if i < 25:
print("%c" % asc,':',freq[i],end=' ')
if (i + 1) % 5 == 0:
print('\n')
else:
print("%c" % asc,':',freq[i])
asc = asc + 1
最后輸出的結(jié)果如下圖所示:

上概率論的課時(shí),偶然看見居然有人拿著詞典去數(shù)字母的數(shù)量,就想能不能寫一個(gè)自動統(tǒng)計(jì)的程序,于是就隨便寫著玩。代碼功底很差,所以寫得很丑(居然有25個(gè)elif),所以看個(gè)樂呵就好了。
總的來說,我覺得有這些可以改進(jìn)的地方:
①讀取單詞的方法可以改進(jìn),這種一行一行讀取的方式,對格式要求很高,很難找到
②用字典來存儲頻數(shù)和頻率是否會更好?后面輸出的時(shí)候可以避免使用ASCII碼,但是字典推導(dǎo)式我屬實(shí)記不清了
③判斷計(jì)數(shù)的這些if和elif能否抽象出一個(gè)方法?增加代碼復(fù)用
④round()函數(shù)會自動去掉小數(shù)后面的0,有沒有什么方法使0被保留下來?這樣輸出的格式會更好看
我的代碼的優(yōu)點(diǎn)估計(jì)只有一點(diǎn)了:
①Python初學(xué)者就能看懂
到此這篇關(guān)于利用Python3實(shí)現(xiàn)統(tǒng)計(jì)大量單詞中各字母出現(xiàn)的次數(shù)和頻率的方法的文章就介紹到這了,更多相關(guān)Python3字母出現(xiàn)次數(shù)和頻率內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python實(shí)現(xiàn)超市管理系統(tǒng)(后臺管理)
這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)超市管理系統(tǒng),增加后臺管理,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-10-10
tensorflow2.0實(shí)現(xiàn)復(fù)雜神經(jīng)網(wǎng)絡(luò)(多輸入多輸出nn,Resnet)
這篇文章主要介紹了tensorflow2.0實(shí)現(xiàn)復(fù)雜神經(jīng)網(wǎng)絡(luò)(多輸入多輸出nn,Resnet),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-03-03
Python中函數(shù)的創(chuàng)建及調(diào)用
這篇文章主要介紹了Python中函數(shù)的創(chuàng)建及調(diào)用,創(chuàng)建函數(shù)也稱為定義一個(gè)函數(shù),可以理解為創(chuàng)建一個(gè)具有某種用途的工具。調(diào)用函數(shù)也就是執(zhí)行函數(shù)。如果把創(chuàng)建的函數(shù)理解為創(chuàng)建一個(gè)具體有某種用途的工具,那么調(diào)用函數(shù)就相當(dāng)于使用該工具2022-06-06

