python笔记day10

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'>
上
posted @ 2025-03-06 21:33  anozzz  阅读(23)  评论(0)    收藏  举报