天天看點

複合資料類型,英文詞頻統計

作業來源于: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')      
複合資料類型,英文詞頻統計