基础知识点扩充
(1)进制转换(内置函数)
1)bin(十进制整数(int)) ##将一个十进制转换成二进制
2)oct(十进制整数(int)) ##将十进制转为八进制
3)int(‘字符串’,字符串对应进制(int)) ##其他进制转十进制,如 int(‘0xa’,16) ,为
将十六进制转换为十进制,其他进制操作一样
4)hex(十进制整数(int)) ##十六进制转十进制
(1)进制转换(format)
1)str.format(),为格式化字符串的函数,基本就是用{}代替%,而且可以接受参数,
位置可以不按顺序.即’’{1}{0}’’.format(‘a’,‘b’),则先a后b.
2)常用操作有:
‘’{ :.2f }’’.format( int ),将int数据类型保留两位小数输出,保留7位则是 { :.7f }, { :+.0f }不带小数
‘’{ :+.2f }’’.format( int ),将int数据类型保留两位小数且保留符号输出,正数带+,负数dai-
‘’{ :, }’’.format( int ),以逗号分割的数字形式,如1,000,000;{ :.2% },百分比保留两位小数{ :.2e },指数输出
3)格式化进制输出为"{:b}".format(int)二进制,{😮}八进制,{:d},十进制,{:x},十六进制
(2)列表与字符串相互转换
- s="".join(list) ##将列表转换成字符串,每个元素之间用""拼接
- list=s.split(’’) ##将字符串用""切割后转换成列表
(3)列表与字典在操作时出现的问题
- 列表在循环中进行删除操作,会出现遗漏现象,因此需要定义一个新列表收集要删除元素,然后遍历新列表在进行删除
- 字典在循环中删除和增加新的键值对会报错,因此要进行删除时也需要定义新列表
3)dic=dict.fromkeys(‘可迭代对象’,赋值对象),此时操作会返回一个新字典,字典的键为可迭代对象每一个元素,但是值
全唯一,都是赋值对象.此时如果赋值对象为可变的,则对其操作,新字典的所有值都会改变.
set集合
(1)特点
- set是可变数据类型(不可哈希),但是set中的元素必须是不可变的(可哈希)
2)元素为不重复的,类似没有值的字典如{1,2,3,4}
3)可以用来进行去重,如将列表转换成集合,再转换成列表能达到去重
4)特别注意,set是没有索引的
5)frozenset(),可以冻结集合,使之变为不可变列表
(2)增删改查
- set.add() ##增加一个新元素,重复的不会添加
- set.update('可迭代’对象) ##迭代增加,把可迭代对象中元素增加到set中
3)set.pop() ##随机删除,且返回被删除的元素
4)set.remove(‘元素’) ##指定删除某个具体元素
5)set.clear() ##清空set集合
6)set修改时只能先remove(),然后再add()
7)查询,可以用for循环,for num in set:
(3)常用操作
- 求集合交集set=(set1&set2),或者set=(set1.intersection(set2))
- 求集合并集set=(set1|set2),或者set=(set1.union(set2))
- 求集合差集(前一个集合有,后一个没有)set=(set1-set2),或者set=(set1.different(set2))
- 求集合反交集()set=(set1^set2),或者set=(set1.symmetric_different(set2))
- 求集合子集set=(set1<set2),或者set=(set1.issubset(set2))
- 求集合超集set=(set1>set2),或者set=(set1.issuperset(set2))
深浅拷贝
- 赋值操作是不会产生新的对象的,如变量1=变量2,此时两个变量用的是一个对象(内存地址)
- 浅拷贝,只拷贝第一层元素内容,[:]切片 copy()
- 深拷贝,把这个对象的内容全部拷贝,需要引入copy模块.用deepcopy()
(1)浅拷贝
1)浅拷贝会产生一个新对象,但是会出现一个问题,内部的元素,第二层以及下层元素无法拷贝,
还是同一个对象,如列表中的列表用的是同一个对象,依旧会产生关联.
2) list1=[1,2,3],list2=list1[:]
3) list2 = list.copy()
4)可用id()查看,内存地址是否一样
(2)深拷贝
- 拷贝之后,会生成完全不同的两个对象,不会产生任何关联
- 引入copy模块,import copy
- list2 = copy.deepcopy(list1) ##深拷贝,拷贝list1所有元素,并存在一个新的内存地址中