序列类型:字符串(str “”)、元组(tuple ())、列表(list [])
可变数据类型:列表 集合 字典
不可变数据类型:字符串 元组
(1)元组:
元组类型,一旦创建不可修改。
creature="cat","dog","tiger","human"
print(creature)
creature[-1]=[] #错误操作
print(creature)
结果显示:
('cat', 'dog', 'tiger', 'human')
creature[-1]=[]
TypeError: 'tuple' object does not support item assignment
creature="cat","dog","tiger","human"
print(creature)
color=("red","0x001100","blue",creature)#元组类型采用逗号和圆括号表示,圆括号可选
print(color)
print(color[-1][2])
结果显示:
('cat', 'dog', 'tiger', 'human')
('red', '0x001100', 'blue', ('cat', 'dog', 'tiger', 'human'))
tiger
元组,可多变量同步赋值。
a,b="dog","tiger"
print(a,b)
a,b=b,a
print(a,b)
结果显示:
dog tiger
tiger dog
(2)列表:
list()函数:可将元组或字符串转换成列表。
ls=[425,"BIT",[10,"CS"],425]
print(ls)
print(ls[2][-1][0])
print(list("中国是一个伟大的国家"))
print(list())#返回一个空列表
结果显示:
[425, 'BIT', [10, 'CS'], 425]
C
['中', '国', '是', '一', '个', '伟', '大', '的', '国', '家']
[]
(3)元组和序列的区别:
元组与列表是非常类似的,区别在于元组的元素值不能修改,元组是放在括号中,列表是放于方括号中
a.list()函数将元组转换为列表。
无序组合(无索引和位置概念)
创建集合:
#法一:
S={425,"BIT",(10,"CS"),424,"BIT"}
print(S)
#法二:由set()函数生成
W=set("apple")
print(W)
V=set(("cat","dog","tiger","human"))
print(V)
结果显示:
{424, 425, (10, 'CS'), 'BIT'}
{'e', 'l', 'p', 'a'}
{'human', 'dog', 'cat', 'tiger'}
映射类型是“键-值”数据项的组合,每个元素是一个键值对(key,value)(属性与值得映射)
{<键1>:<值1>,<键2>:<值2>,……,<键n>:<值n>}
country_city={"中国":"北京","美国":"华盛顿","法国":"巴黎"}
print(country_city)
#{'中国': '北京', '美国': '华盛顿', '法国': '巴黎'}
print(country_city["中国"])
#北京
country_city["英国"]="伦敦"
print(country_city)
#{'中国': '北京', '美国': '华盛顿', '法国': '巴黎', '英国': '伦敦'}
country_city.keys()
#dict_keys(['中国', '美国', '法国', '英国'])
country_city.values()
#dict_values(['北京', '华盛顿', '巴黎', '伦敦'])
country_city.items()
#dict_items([('中国', '北京'), ('美国', '华盛顿'), ('法国', '巴黎'), ('英国', '伦敦')])
for key in country_city:
print(key)
#中国
#美国
#法国
#英国
for num in nums: ##表示 num为nums中的元素,从中遍历(而不需下标)
import math
#依次获取用户输入的数字
def GetNum():
nums=[]
iNumStr=input("请输入数字(直接输入回车退出):")
while iNumStr != "":#中间没有空格,表示回车退出
nums.append(eval(iNumStr))
iNumStr=input("请输入数字(直接输入回车退出):")
return nums
#计算平均值
def mean(nums):
sum=0.0
for num in nums:
sum += num
nums_mean=sum/len(nums)
return nums_mean
#计算方差
def dev(nums,nums_mean):
nums_dev_=0.0
for num in nums:
nums_dev_ += (num-nums_mean)**2
nums_dev=math.sqrt(nums_dev_/len(nums))
return nums_dev
#计算中位数
def median(nums):
if len(nums)%2 == 0:
nums_median=(nums[len(nums)//2-1]+num[len(nums)//2])/2
else:
nums_median=nums[len(nums)//2]
return nums_median
#主函数:
number=GetNum()
print("数据:{}\n平均值:{}\n方差:{:.1f}\n中位数:{}".format\
(number,mean(number),dev(number,mean(number)),median(number)))
print(len(number))
结果显示:
请输入数字(直接输入回车退出):99
请输入数字(直接输入回车退出):98
请输入数字(直接输入回车退出):97
请输入数字(直接输入回车退出):96
请输入数字(直接输入回车退出):95
请输入数字(直接输入回车退出):
数据:[99, 98, 97, 96, 95]
平均值:97.0
方差:1.4
中位数:97
5
jieba是python中的第三方中文分词函数库
进入管理员权限,并执行 pip3 install jieba
C:\WINDOWS\system32>pip3 install jieba
若加载时间过长,使用如下命令:(因为服务器在国外)
C:\WINDOWS\system32>pip3 install jieba -i https://pypi.tuna.tsinghua.edu.cn/simple
安装指定版本:pip3 install numpy-1.9.2
卸载使用:pip3 uninstall jieba
升级:pip3 install -U numpy
精确模式:精确切开句子
-全模式:扫描所有可以成词的词语(冗余多)
-搜索引擎模式:在精确模式的基础上,对长词再次切分。
import jieba
print(jieba.lcut("中华人民共和国是一个伟大的国家"))
print(jieba.lcut("中华人民共和国是一个伟大的国家",cut_all=True))
print(jieba.lcut_for_search("中华人们共和国是一个伟大的国家"))
结果显示:
['中华人民共和国', '是', '一个', '伟大', '的', '国家']
['中华', '中华人民', '中华人民共和国', '华人', '人民', '人民共和国', '共和', '共和国', '国是', '一个', '伟大', '的', '国家']
['中华', '人们', '共和', '共和国', '是', '一个', '伟大', '的', '国家']
文本下载链接:https://python123.io/resources/pye/hamlet.txt
def getText():
txt=open("hamlet.txt","r").read()
txt=txt.lower()
for ch in "'#$%^&*()+_,./?:;'{}[][\\]!~[|]@*":
txt=txt.replace(ch," ")
return txt
hamletTxt=getText()
words=hamletTxt.split()#该函数采用空格对字符串中的信息进行分隔,并以列表格式返回给变量
#words 是列表类型,以空格间隔
counts={}#创建字典类型,单词和出现次数构成字典类型(映射)
for word in words:
counts[word]=counts.get(word,0)+1 #键:word 值:出现次数
''' 等价于:
if word in counts:
counts[word]=counts[word]+1
else:
counts[word]=1#表示该词第一次出现
'''
#移除部分词(介词 冠词等等)
excludes={"the","and","of","you","a","i","my","in"}
for word in excludes:
del(counts[word])
#进行排序
items=list(counts.items()) #将字典类型(无序)转换为列表类型进行排序
items.sort(key=lambda x:x[1],reverse=True)
#reverse=True表示从大到小排序,默认为从小到大
#sort中的lambda用来表示,使用item中的哪一个多元选项的列表作为排序列
#此处,表示按照键值对的值进行排序
for i in range(10):
word,count=items[i]
print("{0:<10}{1:>5}".format(word,count))
结果显示:
to 744
hamlet 470
it 418
that 404
is 356
not 313
lord 310
his 296
this 296
but 270
文本链接:https://python123.io/resources/pye/threekingdoms.txt
import jieba
#获取文本
txt=open("threekingdoms.txt","r",encoding='utf-8').read()
words=jieba.lcut(txt)
#for ch in "~!@#$%^&*()_+=-—[||]|\{}[]':;<>,.。,、/`·":
# ch=" "
#创建字典类型
counts={}#counts[word,count] 键值对
for word in words:
if len(word)==1:
continue
#同义词替换
elif word == "孔明"or word == "孔明曰":
rword="诸葛亮"
elif word == "关公"or word == "云长":
rword="关羽"
elif word == "玄德"or word=="玄德曰":
rword="刘备"
elif word == "孟德"or word=="丞相":
rword="曹操"
else:
rword=word
counts[rword]=counts.get(rword,0)+1
#移除部分词
excludes={"将军","却说","荆州","二人","不可","不能","如此","如何"}
for word in excludes:
del(counts[word])
#将字典类型转换为列表类型,并进行排序输出
items=list(counts.items())
items.sort(key=lambda x:x[1],reverse=True)
for i in range(5):
word,count=items[i]
print("{0:<10}{1:>5}".format(word,count))
结果显示:
曹操 1451
诸葛亮 1383
刘备 1252
关羽 784
张飞 358