一、基础数据类型的扩展
1.1GBK ---> UTF - 8
# str --->bytes s1 = '太白' # 字符串是unicode编码 b1 = s1.encode('gbk') # 翻译成gbk编码的形式 print(b1) # b'xccxabxb0xd7' 两位 s2 = b1.decode('gbk') # 解码成字符串 print(s2) b2 = s2.encode('utf-8') # 翻译成UTF- 8编码的形式 print(b2) # b'xe5xa4xaaxe7x99xbd' 三位
1.2 字母可以直接在GBK和UTF-8之间转换
s1 = 'alex' b1 = s1.encode('gbk') s2 = b1.decode('utf-8') print(s2)
注意:上面的代码成立:因为utf-8 gbk Unicode等编码的英文字母,数字,特殊字符都是映射的ASCII码。
2、元组
# 如果元组中只有一个数据,且没有逗号,该元组与里面的数据的数据类型相同。 tu1 = (1,) tu2 = ('alex') tu3 = ([1,2,3]) print(tu1,type(tu1)) # (1,) <class 'tuple'> print(tu2,type(tu2)) # alex <class 'str'> print(tu3,type(tu3)) # [1, 2, 3] <class 'list'>
3.1 列表的相加
# 列表是可以相加的 l1 = [1,2,3] l2 = [4,5,6,1,2,3] l3 = l1 + l2 print(l3) # [1, 2, 3, 4, 5, 6]
注意:列表是可以相加的,但是不能相减
3.2列表的删除
注意:再循环一个列表时,如果对列表中的某些元素进行删除,那么次元素后面的所有元素就会向前进一位,他们的索引就会发生变化。
列表的三种删除方式:
例题 :删除索引为奇数位的元素,形成新的列表
# 方法一 :切片+步长 l1 = [11,22,33,44,55,66,77] print(l1[::2]) # [11, 33, 55, 77] # 方法二: 创建新列表 l1 = [11,22,33,44,55,66,77] l2 = [] for i in l1: if l1.index(i) % 2 == 0: l2.append(i) l1 = l2 print(l1) # 方法三:倒序删除 l1 = [11,22,33,44,55,66,77] for i in range(len(l1)-1,-1,-1): # 倒序循环 #print(i) if i % 2 == 1: l1.pop(i) # 按照索引去删除 print(l1)
4.1字典的三种创建方式
# (1)直接创建 dic1 = {'name':'alex','age':28,'sex':'M'} # (2)fromkeys()创建 dic = dict.fromkeys([1,2,3],'alex') print(dic) # {1: 'alex', 2: 'alex', 3: 'alex'} 值的内存地址指向同一个 # (3)通过 dict()创建 dic = dict({'name':'alex','age':28,'sex':'M'}) # 存在即合理 print(dic)
4.2 如何在循环时删除字典的值: 创建一个列表,再循环列表时删除字典的数据
dic1 = {'key1': 'alex1', 'key2': 'alex2', 'key3': 'alex3','name':'wusir'} # 将dic的健中含有k的元素的所有键值对删除。 key = [] for k in dic1.keys(): key.append(k) for i in key: if "k" in i: dic1.pop(i) print(dic1)
注意:dictionary changed size during iteration : 再循环一个字典时,不能改变字典的大小
5、基础数据类型之间的转换
5.1int str bool 三者的转换
# int str bool 三者的转换 # str <---> bytes # encode() decode() # str <---> list s1 = 'alex wusir taibai' l1 = s1.split() print(l1) # ['alex', 'wusir', 'taibai'] # list <---> str l1 = ['alex', 'wusir', 'taibai'] s2 = ' '.join(l1) print(s2) # 'alex wusir taibai'
5.2元组 <---> list
# 元组 <---> list tu2 = (0,2,3) l1 = list(tu2) print(l1) # [0, 2, 3]
5.3字典<--->list
# 字典<--->list dic1 = {'key1': 'alex1', 'key2': 'alex2', 'key3': 'alex3','name':'wusir'} l1 = list(dic1) # 可以将字典的key取出来,形成列表 print(l1) # ['key1', 'key2', 'key3', 'name'] # 其他形式的转化 :keys() values() items()
6、集合
set1 = {'alex',[1,2],1,2,3} # unhashable type: 'list' set2 = {'alex','wusir'} set3 = set({'alex','wusir','alex'}) # set转化为集合,集合有去重的特性 print(set3)
6.1关系测试
set1 = {1,2,3,4,5} set2 = {4,5,6,7,8,9} 交集 print(set1 & set2) print(set1.intersection(set2)) # 并集 print(set1 | set2) print(set1.union(set2)) # 反交集 print(set1 ^ set2) print(set1.symmetric_difference(set2)) # 差集 print(set1- set2) print(set1.difference(set2)) # 子集 set1 = {1,2,3} set2 = {1,2,3,4,5,6} print(set1 < set2) print(set1.issubset(set2)) # 超集 set1 = {1,2,3} set2 = {1,2,3,4,5,6} print(set2 > set1) print(set2.issuperset(set1))
6.2 集合转换元组
set1 = {1,2,3} set3 = frozenset(set1) # 转换成元组 *** print(set3) # frozenset({1, 2, 3})
7.1赋值运算
1 = [1,2,3] l2 = l1 l1.append(666) print(l2) print(id(l1)) print(id(l2)) # 指向同一个内存地址
8、深浅copy
# (1) 浅copy l1 = [1,2,3,[22,]] l2 = l1.copy() # l1.append('alex') # print(l1,l2) # print(id(l1),id(l2)) # 指向不同一个内存地址 l1[-1].append('taibia ') print(l1,l2) print(id(l1)) # 内存地址不相同 print(id(l2)) print(id(l1[-1])) # 内存地址相同 print(id(l2[-1]))
# (1)深copy import copy l1 = [1,2,3,[22,]] l2 = copy.deepcopy(l1) # print(l1,l2) # l1.append(666) l1[-1].append('太白') print(l2)