Python 集合、编码转换
1. 集合操作
集合是一个无序的,不重复的数据组合, 他的主要作业如下。
1. 去重,把一个列表变成集合,就自动去重了
2. 关系测试,测试两组数据之前的交集、差集、并集等关系
1.1 创建集合
s1 = {1,4,5,7,3,6,7,9} s2 = set('abcd') s3 = set() print(type(s1),type(s2),type(s3))
list_1 = [1,4,5,7,3,6,7,9] list_1 = set([list_1]) list_2 = set([2,6,0,66,22,8,4]) list_3 = set([1,3,7]) list_4 = set([5,6,8])
1.2 增加数据
集合有去重功能,当追击的数据是集合中存在的,则不进行任何操作
- add():
- update():追加的数据是序列
#添加 list_3.add(100) list_3.update([22,44,66])
1.3 删除数据
- remove():删除集合中的指定数据,如果数据不存在会报错
- discard():删除集合中的指定数据,如果数据不存在也不会报错
- pop():随机删除集合中的某个数据,并返回这个数据。
list_4.remove(5) # 删除5,没有会报错 list_3.discard(1) # 删除1,没有不会报错 print(list_3,list_4) list_3.pop() #随机删 print(list_3)
1.4 查找数据
- in:判断数据在集合序列
- not in:判断数据不在集合序列
list1 = {1,2,3,4} print(4 in list1) print(4 not in list1)
1.5 其他方法
list_1 = [1,4,5,7,3,6,7,9] list_1 = set(list_1) list_2 = set([2,5,6,0,66,22,8,4]) list_3 = set([1,3,7]) list_4 = set([5,6,8]) #交集:把两个集合中相同的打印出来 print(list_1 & list_2) print(list_1.intersection(list_2)) #并集:两个集合,合并,重复的只打印一次 print(list_1 | list_2) print(list_1.union(list_2)) #差集:打印其他集合中不存在的数据 print(list_1 - list_2) print(list_1.difference(list_2)) #list_1打印第list_2没有的数据 print(list_2.difference(list_1)) #list_2打印第list_1没有的数据 #子集:list_1集合中包含list_3 print(list_3.issubset(list_1)) #父集:list_2集合中包含list_4 print(list_2.issuperset(list_4)) #对称差集:list_1 和 list_2 集合中有相同的数据都不打印 print(list_1 ^ list_2) #合并重复的不打印 print(list_1.symmetric_difference(list_2)) #判断是否是交集:判断两个集合是否包含相同的元素,如果没有返回 True,否则返回 False print(list_3.isdisjoint(list_1)) #集合长度 print(len(list_3))
2. 字符编码与转换
- encode() 编码,把uft-8/gbk编写成unicode
- decode() 解码,把unicode解码成utf-8/gbk
python2:
import sys print(sys.getdefaultencoding()) msg = "我爱北京天安门" msg_gb2312 = msg.decode("utf-8").encode("gb2312") gb2312_to_gbk = msg_gb2312.decode("gbk").encode("gbk") print(msg) print(msg_gb2312) print(gb2312_to_gbk)
python3:
import sys print(sys.getdefaultencoding()) msg = "我爱北京天安门" #msg_gb2312 = msg.decode("utf-8").encode("gb2312") msg_gb2312 = msg.encode("gb2312") #默认就是unicode,不用再decode,喜大普奔 gb2312_to_unicode = msg_gb2312.decode("gb2312") gb2312_to_utf8 = msg_gb2312.decode("gb2312").encode("utf-8") print(msg) print(msg_gb2312) print(gb2312_to_unicode) print(gb2312_to_utf8)