- 其他
gbk的bytes --> utf-8的bytes
decode encode
注:英文,数字,特殊字符可直接转化,因为都是基于ASCⅡ。
enumerate(interable, 初始索引) 生成(索引, 元素)的二元数组的可迭代对象。(for index, i in ...)
打印时使用format格式化输出加 \t 等时更美观
- 基础数据类型补充
1.元组中只有一个数据,且没有逗号,则该“元组”与里面数据类型相同。
tu1 = (1,) tu2 = ('alex') tu3 = ([1, 2, 3],) print(tu1, type(tu1)) print(tu2, type(tu2)) print(tu3, type(tu3)) ''' (1,) <class 'tuple'> alex <class 'str'> ([1, 2, 3],) <class 'tuple'> '''
2.列表与列表可以相加
3.循环列表(可变数据)时最好不要改变列表大小,如增/删某些元素。
可倒序操作;或将结果添加到新列表中;或将要删除元素添加到新列表中再循环新列表删除。
4.字典的创建:1.dic = {}
2.dic = dict({}) 实例化对象
3.fromkeys:{}.fromkeys(interable, 默认值)或dict.fromkeys(interable, 默认值)。注意默认值设为[]时是同一个列表,在内存指向相同地址。
5.数据类型转换:1.int str bool之间
2.str <--> bytes
3.str <--> list
#str --> list s1 = 'alex wusir taibai' l1 = s1.split() print(l1) #list -->str l2 = ['alex', 'wusir', 'taibai'] s2 = ' '.join(l2) print(s2) ''' ['alex', 'wusir', 'taibai'] alex wusir taibai <class 'str'> '''
4.list(dict.keys / values / items)
5.tuple <--> list
l1 = [1, 2, 3] tu1 = tuple(l1) print(list(tu1), type(list(tu1))) print(tuple(l1), type(tuple(l1))) ''' [1, 2, 3] <class 'list'> (1, 2, 3) <class 'tuple'> '''
6.dic --> list:把键转成列表
list --> dic不可以
7. 转bool值为False:0,'',[],{},set() --> bool 为False
- 集合set
{'wusir', 'alex', 1, 2, 3}
定义:set1 = {'wusir', 'alex', 1, 2, 3}或set1 = set({'wusir', 'alex', 1, 2, 3})
要求里面元素必须是不可变的数据类型,但集合本身是可变数据类型。集合里面元素不重复(天然去重),无序。
主要用途:1.去重 2.关系测试
list去重(重点必考):
l1 = [1, 2, 3, 1, 2, 3, 4, 5, 4, 5] set1 = set(l1) l2 = list(set1) print(set1) print(l2) ''' {1, 2, 3, 4, 5} [1, 2, 3, 4, 5] '''
增:
set.add() 无序
set.update(interable) 相当于列表的extend,但也是无序的。
删:
remove(元素)
pop() 随机删除
clear() 清空。空集合表示为set()与字典区分
del 删除集合
关系测试:
交集:set1 & set2 或 set1.intersection(set2)
并集:set1 | set2 或 set1.union(set2)
反交集:set1 ^ set2 或 set1.symmetric_difference(set2)
差集(set1中set2没有的):set1 - set2 或 set.difference(set2)
子集:set1 < set2 或 set.issubset(set2)
超集:set2 > set1 或 set2.issuperset(set1)
frozenset冻集合:将集合变为不可变数据类型,能作为字典中的key
set1 = {1, 2, 3}
set2 = frozenset(set1)
- 深浅copy
赋值运算:
l1 = [1, 2, 3] l2 = l1 l1.append(666) print(l2) print(id(l1), id(l2)) ''' [1, 2, 3, 666] 2491353239048 2491353239048 '''
浅copy:第一层独立,第二层开始到更深,都使用一个内存地址。
l1 = [1, 2, 3] l2 = l1.copy() l1.append(666) print(l2) print(id(l1), id(l2)) l1 = [1, 2, 3, [44, 55]] l2 = l1.copy() l1[-1].append(666) print(l2) print(id(l1), id(l2)) print(id(l1[-1]), id(l2[-1])) ''' [1, 2, 3] 1759860329992 1759860329928 [1, 2, 3, [44, 55, 666]] 1759860329736 1759860329992 1759860329800 1759860329800 '''
深copy:
import copy
copy.deepcopy(...)
import copy l1 = [1, 2, 3, [44, 55]] l2 = copy.deepcopy(l1) l1[-1].append(666) print(l2) print(id(l1), id(l2)) print(id(l1[-1]), id(l2[-1])) ''' [1, 2, 3, [44, 55]] 1941077986568 1941077984136 1941077986632 1941077984456 '''
应用场景:1.面试
2.完全独立copy一份数据,与原数据没有关系,用深copy
3.如果一份数据(列表)第二层开始要与原数据共用,浅copy
面试题:
l1 = [1, 2, 3, [22, 33]] l2 = l1[:] l1[-1].append(666) print(l2) ''' [1, 2, 3, [22, 33, 666]] 切片是浅copy '''