作業來源于:https://edu.cnblogs.com/campus/gzcc/GZCC-16SE2/homework/2696
1.清單,元組,字典,集合分别如何增删改查及周遊。
'''
清單的增删改查
'''
List = [1, 2, 3]
# 增 append / insert / extend
List.append(['新清單', '新元素']) # 将新元素追加到清單末尾
print(List) # --> [1, 2, 3, ['新清單', '新元素']]
List.insert(2, '插入元素') # 将新元素插入到清單的指定位置處
print(List) # --> [1, 2, '插入元素', 3, ['新清單', '新元素']]
List.extend({'name': 'Tom', 'job': 'CTO'}) # 将集合中的元素拆開放入清單(若該集合為字典則隻放入key)
print(List) # --> [1, 2, '插入元素', 3, ['新清單', '新元素'], 'name', 'job']
List.extend([[{'x': 'y'}, '清單']]) # 将集合中所有元素拆開放入清單
print(List) # --> [1, 2, '插入元素', 3, ['新清單', '新元素'], 'name', 'job', [{'x': 'y'}, '清單']]
# 删 del / pop / remove
del List[4] # 删除對應下标的值
print(List) # --> [1, 2, '插入元素', 3, 'name', 'job', [{'x': 'y'}, '清單']]
List.pop() # 預設删除最後一個元素
# List.pop(index) # 删除下标index處的元素
print(List) # [1, 2, '插入元素', 3, 'name', 'job']
List.remove('name') # 删除清單中value為 'name' 的值
print(List)
# del List #删除整個清單,并且清單變量List也被删除. 列印會報錯
# print(List.clear()) # 清空清單中的元素,但是清單的變量還在. --> []
# 改 直接對指定下标的元素指派即可
List[-1] = '改最後一個元素' # 對倒數第一個元素指派
print(List) # [1, 2, '插入元素', 3, '改最後一個元素']
# 查 in / not in / index / count
print(2 in List) # 查詢某元素是否在清單中. --> True
print(2 not in List) # 查詢某元素是否不再清單中. --> False
print(List.index(3, 0, len(List))) # 查詢3是否在該清單中(二、三參可略),若在,傳回該元素下标,否則報錯. --> 3
print(List.count(1)) # 統計1在清單中出現的次數. --> 1
'''
元組的查詢, 因元組無法修改而沒有增、删、改
'''
Tuple = ('china', 'beijing')
# 查 index 與 count方法與清單相同,本處不舉例說明
print(Tuple[0]) # 通過元組的下标通路元素. --> china
'''
字典的增删改查與周遊
'''
Dict = {'time': 12, 'address': 'school', 'number': 20}
# 增 直接通過鍵值對指派即可添加
Dict['what'] = 'fight'
print(Dict) # --> {'time': 12, 'address': 'school', 'number': 20, 'what': 'fight'}
# 删 del / clear
del Dict['what'] # 删除'what'對應的鍵值對
# Dict.pop('what') # 功能同上
print(Dict) # -->{'time': 12, 'address': 'school', 'number': 20}
# del Dict # 删除整個字典,包括變量
# Dict.clear() # 清空字典,但是字典的變量還在
# 改 直接對已有的鍵進行指派
Dict['time'] = 13 # 直接指派為13
print(Dict)
# 查 dict['key'] / dict.get('key')
print(Dict['time']) # 直接查詢'time'對應的值,此種方式若該key不存在,則報錯
print(Dict.get('time')) # 功能同上,但若該key不存在會傳回None,而不是報錯
# 周遊
print(Dict.keys()) # 周遊key. --> dict_keys(['time', 'address', 'number'])
print(Dict.values()) # 周遊value. --> dict_values([13, 'school', 20])
print(Dict.items()) # 周遊鍵值對. --> dict_items([('time', 13), ('address', 'school'), ('number', 20)])
'''
set的一些性質:
是一組key的集合,但是不會存儲value,這一點要和字典作差別
set内的元素無序且不可重複
'''
# 建立一個set,需要提供一個list作為輸入
s = set([1, 2, 3])
print(s) # --> {1, 2, 3}
# 增 add(key)
s.add('新增key')
print(s) # --> {1, 2, 3, '新增key'} 新增的元素也許會在集合内的任何位置,每次執行結果也不盡相同!
# 删 remove(key)
s.remove('新增key')
# s.pop() # 删除首個元素 誰在最前面删除誰
print(s) # --> {1, 2, 3}

2.總結清單,元組,字典,集合的聯系與差別。參考以下幾個方面:
- 括号
- 有序無序
- 可變不可變
- 重複不可重複
- 存儲與查找方式
清單:[],有序,可變,可重複,按值存儲,序列中的每個元素都配置設定一個索引,按索引号查找,元素可以是任意類型,可切片
元組:(),有序,與清單類似,但不可變,添加元素時用逗号隔開,按索引号查找,可切片
字典:{},有序,可變容器模型,可存儲任意類型對象,按key:value形式存儲,但key不可重複,不可切片
集合:(),無序,不可重複,建立格式:set()或parame = {value01,value02,...},每個元素可以是清單,元組,字典,不可切片
3.詞頻統計
- 下載下傳一長篇小說,存成utf-8編碼的文本檔案 file
- 通過檔案讀取字元串 str
- 對文本進行預處理
- 分解提取單詞 list
- 單詞計數字典 set , dict
- 按詞頻排序 list.sort(key=lambda),turple
- 排除文法型詞彙,代詞、冠詞、連詞等無語義詞
-
- 自定義停用詞表
- 或用stops.txt
- 輸出TOP(20)
- 可視化:詞雲
# import nltk
# nltk.download("stopwords")
from nltk.corpus import stopwords
stops=set(stopwords.words('english'))
#通過檔案讀取字元串 str,對文本進行預處理
def gettxt():
sep=".,:;?!-_'"
txt=open('Crimes and Punishments.txt','r', encoding='UTF-8').read().lower()
for ch in sep:
txt=txt.replace(ch,' ')
return txt
#分解提取單詞 list
txtList=gettxt().split()
print(txtList)
print('crimes:',txtList.count('crimes'))
txtSet=set(txtList)
#排除文法型詞彙,單詞計數字典 set , dict
txtSet=txtSet-stops
print(txtSet)
txtDict={}
for word in txtSet:
txtDict[word]=txtList.count(word)
print(txtDict)
print(txtDict.items())
word=list(txtDict.items())
#按詞頻排序 list.sort(key=lambda),turple
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('Crimes and Punishments.csv',encoding='utf-8')