1 集合类型
作用
关系运算
去重(有局限性)
friends1=['aa','bb','ccc']
friends2=['aa','bb','ee']
#寻找共同好友
l=[]
for x in friends1:if x in friends2:l.append(x)
print(l)
['aa', 'bb']
定义
{}内分开多个元素,满足以下条件
1.元素必须是不可变类型
2.集合内元素无序
3.集合内元素没有重复
s={1,2}#s=set({1,2})
s={1,1,1,1,1,2,3}
print(s)
s={}#默认空字典
print(s,type(s))
s=set()
print(s,type(s))
{1, 2, 3}
{} <class 'dict'>
set() <class 'set'>
类型转换
s=set('hellollll')
print(s)
s=set([1,2,1,1,1,1,1])#列表里不能放列表,可变类型会报错
print(s)
s=set({'k1':111,'k2':222})
print(s)
{'o', 'e', 'h', 'l'}
{1, 2}
{'k1', 'k2'}
内置方法
关系运算
- 交集
- 并集
- 差集
- 对称差集
- 父子集 包含关系
#符号形式
#内置方法
friends1={'aa','bb','ccc'}
friends2={'aa','bb','ee'}
#取交集
print(friends1 & friends2)
print(friends1.intersection(friends2))
#取并集
print(friends1 | friends2)
print(friends1.union(friends2))
#取差集 1独有的好友
print(friends1-friends2)
print(friends1.difference(friends2))
#取对称差集
print(friends1^friends2)
print(friends1.symmetric_difference(friends2))
#父子集:包含的关系
s1={1,2,3}
s2={1,2,4}
s3={1,2}
print(s1>s2)
print(s1>s3)
print(s1.issuperset(s3))
print(s3.issubset(s1))
{'bb', 'aa'}
{'bb', 'aa'}
{'bb', 'ccc', 'aa', 'ee'}
{'bb', 'ccc', 'aa', 'ee'}
{'ccc'}
{'ccc'}
{'ccc', 'ee'}
{'ccc', 'ee'}
False
True
True
True
去重
- 只能针对不可变类型
- 无法保证原来的顺序
l=[1,1,1,1,3,344,5,'a','c']
print(list(set(l)))l=[{'name':'lili','age':18,'sex':'male'},{'name':'lili','age':18,'sex':'male'},{'name':'aaaa','age':18,'sex':'male'},{'name':'lili','age':18,'sex':'male'}
]
new_l=[]
for dic in l:if dic not in new_l:new_l.append(dic)
print(new_l)
['c', 1, 3, 5, 'a', 344]
[{'name': 'lili', 'age': 18, 'sex': 'male'}, {'name': 'aaaa', 'age': 18, 'sex': 'male'}]
其他操作
- 长度
- 成员运算
- 循环
s={'a','b','c'}
print(len(s))
print('a' in s)
for item in s:print(item)
3
True
c
b
a
其他内置方法
- discard 删除元素-存在则删除,否则啥也不做
- update 新集合更新老集合
- pop 随机删除
- add 添加元素
- isdisjoint 判断独立
s={1,2,3}
s.discard(1)
s.discard(0)
print(s)s.update({1,3,5})
print(s)s.difference_update({3,4,5})#求差集并且赋值
print(s)s.pop()
print(s)s.add('a')
print(s)res=s.isdisjoint({3,4,5})#判断是否独立,没有交集
print(res)
{2, 3}
{1, 2, 3, 5}
{1, 2}
{2}
{2, 'a'}
True
2 数据类型总结分类
有序or无序
有序又称为序列类型
字符串 列表 元组 有索引-序列类型
字典 无序 映射类型
直接访问 数字
顺序访问 字符串 列表 元组
key访问 字典
存一个值还是多个值
存一个值称为原子类型,存多个值称为容器类型
数字 整形 浮点型
列表 元组 字典
可变or不可变
可变类型:列表 字典 集合
不可变类型:数字 字符串 元组
3 字符编码
理论多 结论少
文本文件内容由字符组成
文本编辑器读取文件内容的过程
1.程序存储在硬盘 2.读入到内存运行 3.显示
python
1.python解释器 相当于启动文本编辑器
2.由.py读入到内存
3.当作语法识别
文件读入+变量定义
字符和二进制的对应关系-字符编码表
字符----》翻译为二进制存储-----》翻译成显示
发展史
- 一家独大 ascll码
8位二进制数对应一个英文字符 - GBK 对应中文字符
8位二进制数对应英文字符
16位二进制数对应中文字符
日本-韩国 shift_ji euc_kr
只能输入各国的字符 - 通用标准
unicode(内存中统一使用unicode):
兼容万国字符
采用16进制对应一个中文字符
生僻会采用4bytes或者8bytes
残留其他标准文件·
》gbk--------转成unicode编码----------对应成字符
人类字符------------unicode格式编码-------------
| |
| shift_jis
|
硬盘
|
|
gbk二进制
老的字符编码都可以转换为unicode 但不能通过unicode互转
英文字符多时-16位占空间-存硬盘的时候io延迟-原有基础上精简
utf-8:unicode transform format 8 unicode 的转换格式
英文->1bytes
汉字->3bytes
存乱了
取乱了
总结
- 内存固定使用unicode,可以改变的是存入硬盘采用的格式
unicode->gbk
unicode->utf-8 - 文本文件存取乱码问题
存乱:编码格式设置为支持文件内容字符的格式 utf-8
取乱:解决方法是,按什么编码存按什么编码取
运行当中怎么保证不乱码
读py文件阶段:
python3 默认读utf-8
python2 默认 ascll
指定文件头 修改默认编码 和存储编码保持一致
在py文件首行 # coding:gbk
告诉解释器存储的编码-先按默认编码读首行
识别python语法阶段:
python3的str 默认存成Unicode 不会乱码
保证python2的str不乱
# coding:utf-8
x='上'
print(x)
x=u'上'#强制存储为unicode
print([x])
上
['上']
了解
python2解释器有两种字符串类型 str unicode
x='上'不指定是会按照文件头指定的编码存储
gbk 首位用来标志中英文 判断1个bytes还是2个bytes
编码解码
编码:utf-8转为 其他 保存为bytes类型 老平台对接
解码:其他编码转为utf-8
x='上'
res=x.encode('gbk')
print(res,type(res))
print(res.decode('gbk'))
b'\xc9\xcf' <class 'bytes'>
上