2.19 2.20 集合
1/ 里面的元素不可变,你不能存list dict在集合里, 字符串 数字 元组等不可变的类似可以存
2/ 天生去重
3/ 无序,
集合可以干2件事
去重 和 关系运算, 交集 差集 并集
a = {1,2,3,4,2,'alex',3,'rain','alex'}
print(a)
{1, 2, 3, 4, 'alex', 'rain'}
天生去重,所以重复的值 存不进去
----------------------
帮列表去重, 因为集合天生去重,所以 想办法把列表转成集合, 去重后,在转回列表
li = [1,2,1,22,3,2,1,4,'rain','alex']
print(li)
newli = set(li)
print(newli)
print(list(newli))
--------------------------------------------
D:\Python\python.exe D:/cc/集合.py
[1, 2, 1, 22, 3, 2, 1, 4, 'rain', 'alex']
{1, 2, 3, 4, 'alex', 'rain', 22}
[1, 2, 3, 4, 'alex', 'rain', 22]
如上所示,列表可以存多个重复的值,也存在多个重复的值,想把列表去重
1/ 通过set 把列表转成 集合
2/ 集合在转成列表
-----------------------------------------
增: add()
a ={1, 2, 3, 4, 'alex', 'rain'}
a.add(5)
a
{1, 2, 3, 4, 5, 'alex', 'rain'}
删: discard() 注意:如果删除一个不存在的值, 不会报错,也不会返回数据
a
{1, 2, 3, 4, 5, 'alex', 'rain'}
a.discard('alex')
a
{1, 2, 3, 4, 5, 'rain'}
pop() 随机删除,少用,用在特定场景
a.pop() pop 是随机删除. 因为数据量太少,肉眼看上去是按照顺序删除的..这叫幻觉
1
a
{2, 3, 4, 5, 'rain'}
remove() 类似 discard ,但是 如果删除一个不存在的值,会报错.
删除存在的不报错,但是也不会返回数据
a
{2, 3, 4, 5, 'rain'}
a.remove(1)
Traceback (most recent call last):
File "<input>", line 1, in <module>
KeyError: 1
2.20 集合关系运算
s_1024 = {"佩奇","老男孩","海峰","马JJ","老村长","黑姑娘","Alex"}
s_pornhub = {"Alex","Egon","Rain","马JJ","Nick","Jack"}
1/ 交集 & intersection() 把在集合1 和集合2 都存在的 取出来
注意:intersection.update() 取出来的结果 和 intersection()一样,但是会把原集合重新覆盖..为取出来的数据
s_1024 & s_pornhub s_1024.intersection(s_pornhub)
{'Alex', '马JJ'}
---------------------------
2/ 并集 or 合集 | union() 把2种数据合并在一起,去重了
s_1024 | s_pornhub s_1024.union(s_pornhub)
{'老村长', 'Rain', '佩奇', 'Egon', 'Nick', '黑姑娘', 'Alex', '海峰', '老男孩', 'Jack', '马JJ'}
------------------------
3/ 差集 - difference() 只看1024的.如果看过1024,也看过pronhub,就不显示
注意:difference_update() 取出来的结果 和 difference()一样,但是会把原集合重新覆盖..为取出来的数据
s_1024 - s_pornhub s_1024.difference(s_pornhub)
{'老村长', '佩奇', '黑姑娘', '海峰', '老男孩'}
-------------------------------
4/ 对称差集 ^ symmetric_difference() 把脚踩2只船的T出去
s_1024 ^ s_pornhub s_1024.symmetric_difference(s_pornhub)
{'Egon', '老村长', '佩奇', 'Nick', '黑姑娘', '老男孩', 'Jack', 'Rain', '海峰'}
--------------------------------------------
1/ 判断2个集合是不是 不相交 ,返回True or False
print(s_1024.isdisjoint(s_pornhub))
False
因为真是结果相交,所以 返回 False
2/ 判断s_1024是不是s_pornhub的子集,返回True or False
print(s_1024.issubset(s_pornhub))
False
因为1024并不是pronhub的子集,所以返回 False
3/ 判断s_1024是不是s_pornhub的父集,返回True or False
print(s_1024.issuperset(s_pornhub))
False
因为1024并不是pronhub的子集,所以返回 False
---------------------------------------------------
2.21 二进制
128 64 32 16 8 4 2 1
245的二进制是什么.可以这样思考
上面全部加起来为 255, (128*2)-1=255
所以 255-10 =245 去掉10个,那么就成功了
8+2=10,那么去掉8 和2 ,结果就是
11110101, 用内置函数看一下结果是否正确:
bin(245)
'0b11110101'
128 64 32 16 8 4 2 1
1 1 1 1 0 1 0 1
-------------------------------
2.22 字符编码-文字是如何显示的
ord()
每一位0或者1所占的空间单位为bit(比特),这是计算机中最小的表示单位
每8个bit组成一个字节,这是计算机中最小的存储单位(毕竟你是没有办法存储半个字符的)
每8个2进制位代表一个字符
bit 位,计算机中最小的表示单位
8bit = 1bytes 字节,最小的存储单位,1bytes缩写为1B
1KB=1024B
1MB=1024KB
1GB=1024MB
1TB=1024GB
1PB=1024TB
1EB=1024PB
1ZB=1024EB
1YB=1024ZB
1BB=1024YB
-----------------------------------
2.26 16进制
16进制转换10进制
0 1 2 3 4 5 6 7 8 9 A = 10, B = 11,,C =12,D=13,E=14,F= 15
FFF=15(16^2) + 15(16^1) + 15*(16^0) = 4095
hex(4095)
'0xfff'
10进制转16进制算法
除16取余数得最低1位,然后把商继续除得第2位,直到商等于0
举例: 23612 16进制结果
解: 23612 /16 = 1475.75 取1475
23612 %16 = 12
1475 /16 = 92 取92
1475 %16 = 3
92 /16 = 5.75 取5
92 %16 = 12
5 /16 = 0.3125 取0
5%16 = 5
看%那一行 结果为: 0x 5 12 3 12 ,12等于c 所以为: 0x5c3c
hex(23612)
'0x5c3c'
-------------------------------------------