python常用数据类型
列表: 与c语言中的数组很相似, 只不过可以存储不同类型的数据
优点:灵活 ,缺点: 效率低
定义方式 []
hero_name = ['鲁班七号', '安琪拉', '李白', '刘备']
print(hero_name)
# # 遍历
for hero in hero_name:
print("遍历结果{}".format(hero))
列表常见操作
- 列表的访问: 列表名[索引]
print("索引结果{}".format(hero_name[2]))
2.添加 append
hero_name.append('后羿')
print("添加后的列表{}".format(hero_name))
3.修改
hero_name[3] = 1000 #修改第4个元素为1000
print("修改后的列表{}".format(hero_name))
- 删除: del 列表名[]
del hero_name[3]
print("删除后的列表{}".format(hero_name))
- 结果
打印列表:['鲁班七号', '安琪拉', '李白', '刘备']
遍历结果鲁班七号
遍历结果安琪拉
遍历结果李白
遍历结果刘备
索引结果李白
添加后的列表['鲁班七号', '安琪拉', '李白', '刘备', '后羿']
修改后的列表['鲁班七号', '安琪拉', '李白', 1000, '后羿']
删除后的列表['鲁班七号', '安琪拉', '李白', '后羿']
- 练习:创建一个1-10的列表
#创建一个1-10的列表
data = [] #创建一个空列表
for i in range(1, 11): #使用 for循环 用i 得到range(1,11)的数 再将i使用append放入列表
data.append(i)
print(data)
# 运行结果:[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
字符串
- 定义形式: ' ' 或者 " "
name = 'abcdefg' # 定义一个字符串
print(name[1]) #输出b 所以字符串第一个字符是从0开始的
- 切片: 对序列截取一部分的操作,适用于列表 [起始位置:终止位置:步长] 左闭右开
print(name[0:5:2])
# 全切片的时候可以省略初始和终止位置
print(name[0:7:2]) #等同于print(name[::2])
- 常用方法
- 去两端空格 ?.strip()
name2 = ' abcdefG '
print("去空格前name2的长度:{}".format(len(name2))) # len(?)查询name2的长度
name2 = name2.strip()
print('去空格之后name2的长度:', len(name2))
- 替换: ?.replace('old','new')
price = '$999'
price = price.replace('$', '@')
print("替换之后的price:", price)
- 列表变成字符串的方法 join : '?'.join(?) 也可以用 " "
li = ['a', 'b', 'c', 'd']
a = '-'.join(li) # '-'中的-可以被其他字符替换
print("转换后的li的类型为", type(a))
print("转换后的li为:", a)
- 运行结果
b
ace
aceg
去空格前name2的长度:15
去空格之后name2的长度: 7
替换之后的price: @999
转换后的li的类型为
转换后的li为: a-b-c-d
元组 tuple 元组和列表很像只不过元组不可以修改
- 定义 ()
a = ('longying', 'yifang', 'yujian')
print(a, 'a的类型为:', type(a))
- 访问
print("打印a[2]:", a[2])
- 关于元组需要注意的是 只有一个元素的元组
b2 = ('lisi') #不是元组
c = (1000) #不是元组
print(type(b2))
print(type(c))
# 元组只有一个元素时要在元素只会加上","
b3 = ('lisi',)
c2 = (1000, )
print(type(b3))
print(type(c2))
- 结果
('longying', 'yifang', 'yujian') a的类型为:
打印a[2]: yujian
- 修改1 : 元组是不能被修改的
# 修改 : 元组是不能被修改的
a[2] = 'tiangang' #试图修改a[2],会报错
# 报错了
File "D:/duoruan/py/xiangmu/demo1.py", line 126, in
a[2] = 'tiangang' #试图修改a[2],会报错
打印a[2]: yujian
TypeError: 'tuple' object does not support item assignment
- 修改2 : 元组中含有列表时这个列表是可以被修改的
# 当元组中有可以列表时 修改列表的元素是被允许的
b1 = ["金石仓刀", "风雨不动"] #定义列表
b = (b1, 'longying', 'yifang', 'yujian') # 定义元组b1 元组中含有列表
print("修改b1之前的元组b:", b)
b1.append("流花宫") #修改 元组b中的 列表b1
print("修改b1之后的元组b:", b)
# 结果 :
修改b1之前的元组b: (['金石仓刀', '风雨不动'], 'longying', 'yifang', 'yujian')
修改b1之后的元组b: (['金石仓刀', '风雨不动', '流花宫'], 'longying', 'yifang', 'yujian')
字典 dict
- key-value数据结构:定义形式 {}
# 定义形式 {} 字典中key是不能重复的
info = {'name': "李四",
'age': "34",
'addr': '重庆渝北区'}
print("info的长度", len(info)) # 长度
print("info", info)
- 字典的访问
print(info['name']) # 通过key键来访问value
- 修改
info['addr'] = '北京朝阳区'
print('修改后的字典:', info)
- 增加
info['sex'] = '男'
print('增加后的字典:', info)
- 获取字典中的所有键
print("获取字典中的所有键:", info.keys())
- 获取字典中的所有value值
print("获取字典中的所有value值:", info.values())
- 获取字典中所有的key-values
print("获取字典中所有的key-values:", info.items())
- 列表转换字典
d = [('name', '李四'), ('age', '34'), ('addr', '北京朝阳区'), ('sex', '男')]
d1 = dict(d) #将列表d转换为字典
print("转换列表d为d1:", d1)
- 遍历字典
for k, v in info.items():
print("遍历字典info:", k, v)
集合
- 无序,不重复
# 无序,不重复
set1 = {'zhangsan', 'lisi', 222}
print('set1 的类型:', type(set1))
# 遍历集合
for x in set1:
print("遍历集合set1:", x)
- 结果
info的长度 3
info {'name': '李四', 'age': '34', 'addr': '重庆渝北区'}
李四
修改后的字典: {'name': '李四', 'age': '34', 'addr': '北京朝阳区'}
增加后的字典: {'name': '李四', 'age': '34', 'addr': '北京朝阳区', 'sex': '男'}
获取字典中的所有键: dict_keys(['name', 'age', 'addr', 'sex'])
获取字典中的所有value值: dict_values(['李四', '34', '北京朝阳区', '男'])
获取字典中所有的key-values: dict_items([('name', '李四'), ('age', '34'), ('addr', '北京朝阳区'), ('sex', '男')])
转换列表d为d1: {'name': '李四', 'age': '34', 'addr': '北京朝阳区', 'sex': '男'}
遍历字典info: name 李四
遍历字典info: age 34
遍历字典info: addr 北京朝阳区
遍历字典info: sex 男
set1 的类型:
遍历集合set1: zhangsan
遍历集合set1: lisi
遍历集合set1: 222
python常用数据类型和语法
- 列表排序
data = [] # 创建一个空列表
for i in range(1, 11): # 使用 for循环 用i 得到range(1,11)的数 再将i使用append放入列表
data.append(i)
print('打印data:', data)
from random import shuffle
shuffle(data) # 打乱data
print('随机打乱的列表', data)
data.sort(reverse=True)
print('排序后的列表', data)
- 引用其他文件的函数
# 根据元组第二个元素进行正序排序
name_info_list = [
('张三', 4500),
('李四', 9900),
('王五', 2000),
('赵六', 5500),
]
# 引用Del中的函数
import Del
name_info_list.sort(key=Del.sort_by_grade, reverse=True)
print(name_info_list)
##############################
# Del.py
# 函数
def sort_by_grade(i):
return i[1]
turtle的简单使用
# Python标准库中的GUI界面 -- 》 turtle
# turtle的简单使用
# 绘制 NEUSOFT
# 导入turtle as 是给起一个别名
import turtle as tt
tt.pensize(10) #设置画笔的大小10px
tt.color('blue') #设置画笔颜色
#抬笔
tt.penup()#抬笔 简写 pu
tt.goto(-400, 0)#移动画笔到(-400,0)
tt.pd() #落笔 pendown()的缩写
#绘制N
tt.left(90) #画笔左转90度 = 画笔向上
tt.forward(90)
tt.right(135) #画笔右转135度
tt.forward(115) #沿画笔方向画115px的长度
tt.left(135) #画笔左转135度 = 画笔向上
tt.forward(90)
# 绘制E
# 抬笔
tt.penup()# 抬笔 简写 pu
tt.goto(-210, 90)# 移动画笔
tt.pd() #落笔 pendown()的缩写
tt.left(90)#左
tt.forward(60)
tt.left(90)#下
tt.forward(90)
tt.left(180)#上
tt.forward(45)
tt.right(90)#右
tt.forward(60)
tt.penup()# 抬笔 简写 pu
tt.goto(-270, 0)# 移动画笔
tt.pd() #落笔 pendown()的缩写
tt.forward(60) #此时画笔坐标(-210,0),向右
# 绘制U
tt.penup()# 抬笔 简写 pu
tt.goto(-170, 90)# 移动画笔
tt.pd() #落笔 pendown()的缩写
tt.right(90)
tt.forward(60)# 画笔向下
# tt.left(90) #画笔像右
# circle(r,R) r,R为正数时以左手边为圆心逆时针画圆 半径 和度数
tt.circle(30, 180) # 画 半圆 画完 画笔向上
tt.forward(60) #画笔向上
tt.right(90) #画笔向右
# 为了防止混淆 以后每次画完一个字 画笔都调回默认的向右一样
# 绘制S
tt.penup()# 抬笔 简写 pu
tt.goto(-35, 50)# 移动画笔
tt.pd() #落笔 pendown()的缩写
tt.circle(-23, 270)
tt.circle(-23, -270)
tt.circle(23, -270)
tt.right(90)#画笔向右
# 绘制O
tt.penup()# 抬笔 简写 pu
tt.goto(20, 35)# 移动画笔
tt.pd() #落笔 pendown()的缩写
tt.left(90)
tt.forward(30)
tt.circle(-28, 180)
tt.forward(30)
tt.circle(-28, 180)
tt.right(90)# 画笔向右
# 绘制F
tt.penup()# 抬笔 简写 pu
tt.goto(180, 90)# 移动画笔
tt.pd() #落笔 pendown()的缩写
tt.right(180)# 画笔向左
tt.forward(60)
tt.left(90)
tt.forward(90)
tt.left(180)
tt.forward(50)
tt.right(90)
tt.forward(60) #画笔向右
# 绘制T
tt.penup()# 抬笔 简写 pu
tt.goto(210, 90)# 移动画笔
tt.pd() #落笔 pendown()的缩写
tt.forward(60) #画笔向右
tt.goto(240, 90)# 移动画笔
tt.right(90)
tt.forward(90)
tt.left(90) #画笔向右
# 让gui界面一直显示, 所有执行的代码要写在此函数之前
tt.done()
文件的获取
- python中使用open内置函数进行文件读取需要手动关闭流, 而使用with as 上下文管理器 不用手动关闭流
#本地文件读取
# python中使用open内置函数进行文件读取
f = open(file='./novel/threekingdom.txt', mode='r', encoding='utf-8')
data = f.read()
print(data)
f.close()
# with as 上下文管理器 不用手动关闭流
with open('./novel/threekingdom.txt', 'r', encoding='utf-8') as f: #默认第三个参数不是字符类型,所以要加上encoding
data = f.read()
print(data)
#写入文档,可以按不同类型保存文件
txt = "i like pyhon"
with open("Python.txt", 'w', encoding='utf-8') as w:
w.write(txt)
text = """
Title
重庆师范欢迎你
""" # """ 三个双引号表示多行字符串 """
# 这个保存的HTML文档是可以正常运行的
with open("cqnu.html", 'w', encoding='utf-8') as w:
w.write(text)
- 使用jieba和WordCloud 进行 分词和进行 词云查询
代码都重新写了注释 就不详细说了
1.分词
# 中文分词 jieba
# 安装jieba分词库
# 指定国内镜像安装
# 1.在用户目录下新建pip文件夹
# 2.新建pip.ini文件
# 添加在pip.ini
"""
[global]
index-url = http://mirrors.aliyun.com/pypi/simple/
[install]
trusted-host=mirrors.aliyun.com
"""
# 在Terminal 中使用 pip install jieba 下载安装jieba
# 导入jieba分词
import jieba #引用jieba
#三种分词模式
seg = "我来到北京清华大学"
# 精确模式 精确分词 jieba.lcut()
seg_list = jieba.lcut(seg)
print(seg_list)
# 全模式 找出所有可能的分词结果 冗余性大 jieba.lcut( ,cut_all=True)
seg_list1 = jieba.lcut(seg, cut_all=True)
print(seg_list1)
# 搜索引擎模式 先执行精确模式,在对其中的长词进行处理 jieba.lcut_for_search()
seg_list2 = jieba.lcut_for_search(seg)
print(seg_list2)
- 分词,绘制云词
import jieba #引用jieba
from wordcloud import WordCloud #引用云词绘制工具
import imageio # 引用一个图形工具,可以将云词绘制成需要的形状
# 三国演义小说分词
with open('./novel/threekingdom.txt', 'r', encoding='utf-8') as f:
words = f.read()
print(len(words)) # 字数 55万
words_list = jieba.lcut(words) #精确分词
print(len(words_list)) # 分词后的词语数 35万
print(words_list)
# 绘制三国演义词云
navel_words = " ".join(words_list) #将分词后的结果转换成字符串
print(navel_words)
mask = imageio.imread('./image/china.jpg')
wc = WordCloud(
font_path='msyh.ttc',
background_color='white',
width=800,
height=600,
mask=mask # 想要绘制的形状->中国地图
).generate(navel_words)
wc.to_file('三国演义.png') #绘制云词,保存为 三国演义.png
词云展示: