python複合數據類型以及英文詞頻統計

這個做業的要求來自於:https://edu.cnblogs.com/campus/gzcc/GZCC-16SE1/homework/2753python

 

1.列表,元組,字典,集合分別如何增刪改查及遍歷。數組

列表操做以下所示:數據結構

#列表  
string  = 'list'  
#字符串->列表  
list1 = list(string) # ['l', 'i', 's', 't']  
#列表->字符串  
string1 = ''.join(list1) #list  
#列表的增刪改查  
list1 = list('this is a list')  
#增長  
list1.append('!') #末尾增長元素  
list1.insert(2,'this is index 3') #指定index增長一個元素  
#刪除  
list1.pop(-1)  #刪除指定index的元素 默認是-1 return被刪除元素的值  
del list1[-1]  
if '!' in list1:  #刪除第一個匹配的元素,若是不存在會報錯,沒有返回值  
list1.remove('!')  
#修改  
list1[0] = '0'  #元素賦值  
list1[0:2] = list('05')  #分片賦值  
list1[1:1] = list('1234') #分片賦值 插入新元素  
list1[1:5] = []  #分片賦值 刪除元素  
#查找  
if 'a' in list1:  
index = list1.index('a')  # 查找元素下標  
#拼接  
list2 = ['new','list']  
list1.extend(list2)  #從列表增長元素  
print list1  
#逆置  
list1.reverse();  
print list1  
#去重  
#1  
l1 = ['b','c','d','c','a','a']  
l2 = list(set(l1))  
#2  
l2.sort(key=l1.index) #保持原來的順序  
#3  
l1 = ['b','c','d','c','a','a']  
l2 = []  
for i in l1:  #[l2.append(i) for i in l1 if not i in l2]  
if not i in l2:  
l2.append(i)  
print l2   #保持原來的順序

 

 

集合操做以下所示:app

1 # 兩種方法建立
2 set1 = set('kydaa')
3 set2 = {'abc', 'jaja', 'abc', 'kyda'}
4 print(set1)
5 print(set2)
6 # 結果:自動將重複元素去除
7 {'a', 'y', 'd', 'k'}
8 {'jaja', 'abc', 'kyda'}

 

字典操做以下所示:this

 1 #字典  
 2 #建立  
 3 dict1 = {  
 4 'key':'value',  
 5 'key1':'value1'  
 6 }  
 7 a = [('key1','value1'),('key2','value2')]  
 8 dict1 = dict(a)  
 9 dict1 = {}.fromkeys(['key1','key2'],'default_value') #從鍵值建立dict  
10 dict1 = dict(key1='value1',key2='value2')  
11 #增長  
12 dict1['key3']='value3' #字典能夠自動添加  
13 dict1.setdefault('key5','N/A') #若是不存在,就設置默認值  
14 #刪除  
15 del dict1['key3']  
16 print dict1.pop('key2')  #popitem隨機刪除 和列表的pop同樣  
17 #dict1.clear()  #深刪除,即便有拷貝 也會被刪除  
18 #修改  
19 if 'key1' in dict1:  
20 dict1['key1']='new_value_1'  
21 #查找  
22 if 'key1' in dict1:  
23 print dict1['key1']  
24 if dict1.has_key('key1'):  
25 print dict1['key1']  
26 print dict1.get('key3','not exists') #寬鬆訪問  
27 print dict1.keys(),dict1.values()  
28 #拼接  
29 dict2 = dict(key4 = 'value4') #從字典更新另外一個字典  
30 dict1.update(dict2)

 

2.總結列表,元組,字典,集合的聯繫與區別。編碼

(1)list是處理一組有序項目的數據結構,便可以在一個列表中存儲一個序列的項目。列表中的項目應該包括在方括號中。一旦建立了一個列表,就能夠添加,刪除,或者是搜索列表中的項目。列表是可變的數據類型,而且列表是能夠嵌套的。python裏的列表用「[]」表示。列表的特色是可重複,類型可不一樣,類型不一樣也是跟數組最本質的區別了。 spa

(2)元組和列表十分類似,不過元組是不可變的,即不能修改元組。元組用「()」表示,元組能夠嵌套。code

(3)集合特性:與字典相似,但只包含鍵,而沒有對應的值,包含的數據不重複。blog

   建立:s=set(list or tuple or string),重複的值在集合中只存在一個。排序

(4)字典即把鍵(名字)和值(詳細狀況)聯繫在一塊兒,鍵必須是惟一的。鍵值對在字典中以這樣的方式標記:d={key1:value1 , key2:value2}。鍵/值對用冒號分割,而各個對用逗號分割,全部這些都包括在花括號中。

 

3.詞頻統計

  步驟以下:

(1)下載一長篇小說,存成utf-8編碼的文本文件file;

 (2)經過文件讀取字符串str;

 (3)對文本進行預處理; 

 (4)分解提取單詞list; 

 (5)單詞計數字典set,dict;

 (6)按詞頻排序list.sort(key=lambda),turple;

 (7)排除語法型詞彙,代詞、冠詞、連詞等無語義詞;

 (8)輸出TOP(20);

 (9)可視化:詞雲。

排序好的單詞列表word保存成csv文件。

 1 exclude={'a','the','and','i','you','in','but','not','with','by','its','for','of','an','to'}  #定義數組#
 2 #讀取Harry Potter.txt文件中的英文內容#
 3 def gettxt():
 4     sep=".,:;?!-_'"
 5     txt=open('Harry Potter.txt','r').read().lower()
 6     for ch in sep :
 7         txt=txt.replace(ch,' ')
 8     return txt
 9 #分解提取單詞#
10 bigList=gettxt().split()
11 print(bigList);
12 print('big:',bigList.count('big'))
13 bigSet=set(bigList)
14 #過濾單詞,包括一些冠詞和連詞等#
15 bigSet=bigSet-exclude
16 print(bigSet)
17 #單詞計數#
18 bigDict={}
19 for word in bigSet:
20     bigDict[word]=bigList.count(word)
21 print(bigDict)
22 
23 print(bigDict.items())
24 word=list(bigDict.items())
25 #按詞頻排序#
26 word.sort(key=lambda x:x[1],reverse=True)
27 print(word)
28 #輸出頻率較高的詞語top20#
29 for i in range(20):
30     print(word[i])
31 #排序好的單詞列表word保存成csv文件#
32 import pandas as pd
33 pd.DataFrame(data=word).to_csv('Harry Potter.csv',encoding='utf-8')

 

運行結果以下所示:

 

相關文章
相關標籤/搜索