這個作業的要求來自于:https://edu.cnblogs.com/campus/gzcc/GZCC-16SE2/homework/2696。
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 #保持原來的順序
元組操作如下所示:
#元組 ,操作和清單類似,但是元組不能修改
#建立
tuple1 = ()
tuple1 = 1
tuple1 = 1,2,3
tuple1 = tuple([1,2,3,4]) #序列->元組
print tuple1
字典操作如下所示:
#字典
#建立
dict1 = {
'key':'value',
'key1':'value1'
}
a = [('key1','value1'),('key2','value2')]
dict1 = dict(a)
dict1 = {}.fromkeys(['key1','key2'],'default_value') #從鍵值建立dict
dict1 = dict(key1='value1',key2='value2')
#增加
dict1['key3']='value3' #字典可以自動添加
dict1.setdefault('key5','N/A') #如果不存在,就設定預設值
#删除
del dict1['key3']
print dict1.pop('key2') #popitem随機删除 和清單的pop一樣
#dict1.clear() #深删除,即使有拷貝 也會被删除
#修改
if 'key1' in dict1:
dict1['key1']='new_value_1'
#查找
if 'key1' in dict1:
print dict1['key1']
if dict1.has_key('key1'):
print dict1['key1']
print dict1.get('key3','not exists') #寬松通路
print dict1.keys(),dict1.values()
#拼接
dict2 = dict(key4 = 'value4') #從字典更新另一個字典
dict1.update(dict2)
集合操作如下所示:
# 兩種方法建立
set1 = set('kydaa')
set2 = {'abc', 'jaja', 'abc', 'kyda'}
print(set1)
print(set2)
# 結果:自動将重複元素去除
{'a', 'y', 'd', 'k'}
{'jaja', 'abc', 'kyda'}
2.總結清單,元組,字典,集合的聯系與差別。
(1)list是處理一組有序項目的資料結構,即可以在一個清單中存儲一個序列的項目。清單中的項目應該包括在方括号中。一旦建立了一個清單,就可以添加,删除,或者是搜尋清單中的項目。清單是可變的資料類型,并且清單是可以嵌套的。python裡的清單用“[]”表示。清單的特點是可重複,類型可不同,類型不同也是跟數組最本質的差別了。
(2)元組和清單十分相似,不過元組是不可變的,即不能修改元組。元組用“()”表示,元組可以嵌套。
(3)集合特性:與字典類似,但隻包含鍵,而沒有對應的值,包含的資料不重複。
建立: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檔案。
exclude={'a','the','and','i','you','in','but','not','with','by','its','for','of','an','to'} #定義數組#
#讀取Harry Potter.txt檔案中的英文内容#
def gettxt():
sep=".,:;?!-_'"
txt=open('Harry Potter.txt','r').read().lower()
for ch in sep :
txt=txt.replace(ch,' ')
return txt
#分解提取單詞#
bigList=gettxt().split()
print(bigList);
print('big:',bigList.count('big'))
bigSet=set(bigList)
#過濾單詞,包括一些冠詞和連詞等#
bigSet=bigSet-exclude
print(bigSet)
#單詞計數#
bigDict={}
for word in bigSet:
bigDict[word]=bigList.count(word)
print(bigDict)
print(bigDict.items())
word=list(bigDict.items())
#按詞頻排序#
word.sort(key=lambda x:x[1],reverse=True)
print(word)
#輸出頻率較高的詞語top20#
for i in range(20):
print(word[i])
#排序好的單詞清單word儲存成csv檔案#
import pandas as pd
pd.DataFrame(data=word).to_csv('Harry Potter.csv',encoding='utf-8')
運作結果如下所示:
