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 "", line 1, inKeyError: 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' -------------------------------------------