今日内容概要
数据类型及内置方法
字符编码
文件处理
函数简介
今日内容详细
数据类型及内置方法
列表
name_list =['jason','oscar','tony','kevin']
1.索引取值
print(name_list[0]) # jason
print(name_list[0:3]) # ['jason', 'oscar', 'tony']
print(name_list[0:3:2]) # ['jason', 'tony']
print(name_list[-1]) # kevin
2.长度
print(len(name_list)) # 4 列表内元素的个数
3.添加元素
name_list.append('jerry') # 尾部追加
print(name_list)
name_list.insert(0,'666') # ['666', 'jason', 'oscar', 'tony', 'kevin']
print(name_list) # 在指定的索引位置添加数据
name_list.extend([111,222,333,444])
print(name_list)
"""
extend等价于
for循环加append
for i in [111,222,333,444]:
name_list.append(i)
"""
4 修改元素
name_list[0] = 'jason666'
print(name_list)
5 移除元素
del name_list[0]
print(name_list) # ['oscar', 'tony', 'kevin']
res = name_list.remove('kevin')
print(name_list,res) # ['jason', 'oscar', 'tony'] None
name_list.pop()
print(name_list) # ['jason', 'oscar', 'tony']
res = name_list.pop(1)
print(name_list,res) # ['jason', 'tony', 'kevin'] oscar
6 统计元素出现的个数
l1 = [111,222,333,222,111,222,333,333,333,333]
print(l1.count(333)) # 5
7 类型
但凡能被for循环遍历的数据类型都可以传给list()转换成列表类型
list()会跟for循环一样遍历出数据类型中包含的每一个元素然后放到列表中
list('wdad') # 结果:['w', 'd', 'a', 'd']
list([1,2,3]) # 结果:[1, 2, 3]
list({"name":"jason","age":18}) #结果:['name', 'age']
list((1,2,3)) # 结果:[1, 2, 3]
list({1,2,3,4}) # 结果:[1, 2, 3, 4]
8 排序
l1 = [222,333,444,111,999,666,888]
l1.sort()
print(l1) # [111, 222, 333, 444, 666, 888, 999]
元组
由于元组内的元素是不能被修改的,所以元组的内置方法非常的少
"""
如何查看每一个数据类型都包含哪些内置方法呢?
用数据类型加点号 然后pycharm会给你自动提示出所有的内置方法
"""
t = (111,222,333,444,555,111,111,111,111)
print(t[0]) # 111
print(t[0:4]) # (111, 222, 333, 444)
print(t[0:4:2]) # (111, 333)
print(t[-1]) # 555
print(t.count(111)) # 5
print(t.index(222)) # 1 返回的是index括号内元素所在的索引值
print(t.index(111)) # 0 返回的是index括号内元素所在的索引值
print(t.index(111,1,6)) # 5 返回的是index括号内元素所在的索引值
字典
user_info = {'username':'jason','password':123}
1 字典内元素是无序的 所以字典不支持索引取值
print(user_info['username']) # jason
print(user_info['xxx']) # 不推荐使用 键不存在直接报错
print(user_info.get('password')) # 123
print(user_info.get('xxx')) # None
2 修改值
user_info['username'] = 'tony'
print(user_info) # {'username': 'tony', 'password': 123}
3 添加键值
user_info['hobby'] = 'read' # 重新创建的新的键值对
print(user_info) # {'username': 'jason', 'password': 123, 'hobby': 'read'}
4 三剑客
print(user_info.items()) # dict_items([('username', 'jason'), ('password', 123)])
print(user_info.keys()) # dict_keys(['username', 'password'])
print(user_info.values()) # dict_values(['jason', 123])
5 长度
print(len(user_info)) # 2 键值对的个数
6 更新 用新字典更新旧字典, 有则修改,无则添加
dic= {'k1':'jason','k2':'Tony','k3':'JY'}
dic.update({'k1':'JN','k4':'xxx'})
print(dic) # {'k1': 'JN', 'k2': 'Tony', 'k3': 'JY', 'k4': 'xxx'}
集合
"""
定义:在{}内用逗号分隔开多个元素,集合具备以下三个特点:
1:每个元素必须是不可变类型(整型 浮点型 字符串)
2:集合内没有重复的元素
3:集合内元素无序(不能用索引取值)
"""
s = {1,2,3,4} # 本质 s = set({1,2,3,4})
# 注意1:列表类型是索引对应值,字典是key对应值,均可以取得单个指定的值,而集合类型既没有索引也没有key与值对应,所以无法取得单个的值,而且对于集合来说,主要用于去重与关系元素,根本没有取出单个指定值这种需求。
# 注意2:{}既可以用于定义dict,也可以用于定义集合,但是字典内的元素必须是key:value的格式,现在我们想定义一个空字典和空集合,该如何准确去定义两者?
d = {} # 默认是空字典
s = set() # 这才是定义空集合
d = {}
s = {}
s1 = set()
print(type(d),type(s)) #
s = {1,1,1,1,1,1,1,1,2,2,2,3,4,3,4,5,6,7,8}
# print(s)
l = ['jason','jason','jerry','tom','jason']
# 将列表转成集合
s = set(l)
print(s) # {'jason', 'jerry', 'tom'}
关系运算
'''共同好友、共同关注、共同点赞'''
friends1 = {"zero","kevin","jason","egon"} # 用户1的好友们
friends2 = {"Jy","ricky","jason","egon"} # 用户2的好友们
1.合集(|):求两个用户所有的好友(重复好友只留一个)
res = friends1 | friends2
print(res) # {'zero', 'kevin', 'egon', 'jason', 'Jy', 'ricky'}
2.交集(&):求两个用户的共同好友
res1 = friends1 & friends2
print(res1) # {'egon', 'jason'}
3.差集(-):
res2 = friends1 - friends2 # 求用户1独有的好友
res3 = friends2 - friends1 # 求用户2独有的好友
4.对称差集(^) # 求两个用户独有的好友们(即去掉共有的好友)
res4 = friends1 ^ friends2
{'kevin', 'zero', 'ricky', 'Jy'}
5.值是否相等(==)
>>> friends1 == friends2
False
6.父集:一个集合是否包含另外一个集合
6.1 包含则返回True
>>> {1,2,3} > {1,2}
True
>>> {1,2,3} >= {1,2}
True
6.2 不存在包含关系,则返回True
>>> {1,2,3} > {1,3,4,5}
False
>>> {1,2,3} >= {1,3,4,5}
False
7.子集
>>> {1,2} < {1,2,3}
True
>>> {1,2} <= {1,2,3}
True
可变类型与不可变类型
可变类型
值改变内存地址不变
列表
不可变类型
值改变内存地址也改变
字符串
字符编码
"""
前提准备知识点
1.计算机只能识别二进制数据
2.三大核心硬件
#1.软件运行前,软件的代码及其相关数据都是存放于硬盘中的
#2.任何软件的启动都是将数据从硬盘中读入内存,然后CPU从内存中取出指令并执行
#3.软件运行过程中产生的数据最先都是存放于内存中的(******),若想永久保存软件产生的数据,则需要将数据由内存写入硬盘
3.文本编辑器和Python解释器的异同点
文本编辑器
#阶段1 启动一个文本编辑器(文本编辑器如nodepad++,pycharm,word)
#阶段2、文本编辑器会将文件内容从硬盘读入内存
#阶段3、文本编辑器会将刚刚读入内存中的内容显示到屏幕上
Python解释器
#阶段1
"""
人类的字符 转换 计算机的二进制
转换的过程必须参考一个固定的标准
这个标准我们称之为"字符编码表"
字符编码发展史
1.一家独大
计算机是美国发明的
所以他们需要计算机能够读懂英文字符
英文字符 字符编码表 数字的对应关系
ASCII码表
里面记录了英文字符跟数字的对象关系
用8个比特位即一个bytes(字节)来存储
2的8次方足够表示所有的英文字符
2.群雄割据
中国人
自己发明了一套编码表 GBK码
GBK编码表
中文字符、英文字符跟数字的对应关系
用16个比特位即2个字节来存储中文 英文还是用一个bytes 65535有时候针对生僻字还是无法存储(3bytes\4bytes来存储)
日本人
自己发明一套编码表 shift_jis码
shift_jis码表
日文、英文跟数字的对应关系
韩国人
自己发明一套编码表 Euc_kr码
Euc_kr码表
韩文、英文跟数字的对应关系
不同的国家之间数据无法做到无障碍交流 会出现乱码的情况
3.天下一统
统一的编码 能够识别全世界所有的字符
Unicode万国码表
统一用2个字节存储
英文也用2个字节
中文也用2个字节(不够则再加更多位)
utf-8是Unicode的转换版本
英文是用一个字节
中文是用三个字节
现在内存依旧使用Unicode,硬盘使用utf-8
要想保住不乱码的核心就是文件用什么编码存的就用什么编码取!!
python2和Python3
unicode是1994年才发明出来的
Python2.7默认使用的是编码是ASCII码(Unicode还没有问世)
Python3.X默认使用的编码是Utf-8码
文件头
encoding:utf8
在你的py文件开头用注释写了一句上面的代码,无论是哪一种编码由于都支持英文所以都能读懂上面的文字
告诉编辑器采用文件头采用文件头指定的编码读取接下来的文件内容
小u前缀
encoding:utf8
res = U'你好啊 感觉下午比上午有精神'
编码与解码
res = '你好啊 感觉下午比上午有精神'
r = res.encode('utf-8')
print(r,type(r)) #bytes类型 在Python中bytes类型的数据 你可以直接看成是二进制数据
"""
数据基于网络传输 必须是二进制格式才可以!!
"""
编码:将人类能够读懂的字符按照指定的编码表编码成计算机能够识别的数据
解码:将晋级赛读懂的数据按照指定的编码表解码成人类能够读懂的数据
文件处理
什么是文件?
文件是用来存数据并且应该是长久存储数据的
双击一个文件
从硬盘中读取文件
在打开的文件上写字然后保存
将内存中的数据刷到硬盘
文件其实就是操作系统暴露给用户可以简单方便的操作计算机硬盘的工具
利用Python代码来操作文件
文件操作的基本流程
open('a.txt(文件路径)','r',encoding = 'utf-8')
res = file.read()
print(res)
file.close() # 告诉操作系统关闭文件资源
with上下文管理(推荐使用)
with open('a.txt','r',encoding='utf-8') as file:
res = file.read()
print(res) # 当with里面的缩进代码执行完毕之后会自动调用close
HTML 6733 字节 699 单词 312 行