python基础(三)
#集合与函数
#查询变量内存地址
a = 'alex'
id(a)
#数据的分类
#按可变与不可变分类(修改后内存地址是否变更,改变的为不可变类型,相当于开辟新的内存空间)
可变 : 列表、字典
不可变 : 数字、字符串、元组
#按是否有序分类
直接访问:数字
顺序访问: 字符串、列表、元组
映射访问(速度快,占用内存大):字典 (a = {11:123 , 'adsf' : 22 , (11,22,33) : [4,5,6]} ---> a[(11,22,33)] = [4,5,6])
#存放元素个数来分类
容器类型:列表、元组、字典
原子 :数字、字符串、布尔值
#集合(type = set)
#三个特性
#由不同元素组成、无序、集合中元素只能是不可变类型
#定义集合
a = {1,2,3,'abx',1,1,2} --> a = {1,2,3,'abx'} #自动剔除重复元素
a = set(['asdf','123',321,'123']) --> a = {'asdf','123',321}
#定义不可变的集合
a = frozonset('aaddff')
#添加并更新元素
a = {11,'22','sdsf'}
a.add('alex') --> a = {11,'22','sdsf','alex'} #只能更新单个元素
a.update((1,2,3,'afdga') , 'adf' , b) -- > 更新多个元素(可迭代类型),但是添加的字符串如 第二项'adf' 会被for循环一个个添入集合,想要整体添加字符串可添加元组(元组中包含元素)
#清空
a.clear()
#拷贝
a1 = a.copy()
#随机删除一个元素
a.pop()
#删除指定元素,指定元素不存在会报错,用discard元素不存在不会报错
a.remove('22') --> a = {11,'sdsf'}
a.discard('22') --> a = {11,'sdsf'}
#可迭代的对象如列表、元组、字典(转换的是key的集合)、字符串可转换为集合
a=[123,2133,'adfda']
v = set(a)
#注意转换后会去除重复元素,元素的顺序会被打乱,因为集合是无序的
#求两集合的交集
a={} b={}
a.intersection(b)
a&b
#求并集
a.union(b)
a|b
#求差集
a.difference(b)
a-b --> a有,b没有的
#交叉补集(并集后减去交集)
a.symmetric_difference(b)
a^b
a.symmetric_difference_update(b) --> 更新a的值
#求完差集后更新集合
a.difference_update(b) --> a = a.difference(b)
#判断有无交集
a={1,2} ; b={3,4}
a.isdisjoint(b) --> True
#判断是否为子集
a={1,2,3} ; b={2,3}
a.issubset(b) --> a是否是b的子集 --> False
a<=b
#判断是否为父集
a.issuperset(b)
a>=b
#用集合定义去重
a = [1,1,1,2]
a = list(set(a))
#%字符串格式化
# %s可以传任何类型
a = 'hello world %s lalala' %'yeah'
a = 'hello world %s lalala %s %s yeyeyey' %('yeah' , 1 , [11,22,33]) -->传多个值
%.3s -->截取前三个字符
# %d 只能传int,传浮点会直接去掉小数位置
# %f 传浮点数
%.2f -->保留小数点后两位(四舍五入)
%f --> 默认保留小数点后六位
# 在字符串中输出%号 --> %%
a = ' dafadfs %%'
# 映射传值
a = ' adfdaf %(name)s , ad;fkj %(age)d %(123)s ' % {'name':'alex' , 'age': 18 ,'123' : 'abc'}
----------------------------------------------重要----------------------------------------
#百分号方式
%[(name)][flags][width].[precision]typecode
(name) 可选,用于选择指定的key
flags 可选,可供选择的值有:
+ 右对齐;正数前加正好,负数前加负号;
- 左对齐;正数前无符号,负数前加负号;
空格 右对齐;正数前加空格,负数前加负号;
0 右对齐;正数前无符号,负数前加负号;用0填充空白处
width 可选,占有宽度
.precision 可选,小数点后保留的位数
typecode 必选
#加背景颜色
a = 'abcd \033[42;1m%(name)+10.3s\033[0m hello' % {'name' : 'alex'} --> 42为色号
--------------------------------------------------------------------------------------------
#format字符串格式化
TIPS:
#format后面可以跟字符串,也可以跟列表、元组和字典,但是想传表中值的话,列表、元组前要加* ,字典加 **
a = "i am {0:d}, age {1:s}, really {2}".format(*[2,'dasf',[1,2,3]])
# *[11,22,33]代表把列表中的元素取出,因为format()自动把括号里的元素改成列表或元组的形式,故不能在里面再套一个列表,需要*[]来把列表中元素取出
# **{‘aa’ :123} 同理代表把字典中的键值对改成 aa = '123' 的形式
# 默认
a = 'dafdaf {} dsf {}' .format('alex' , 123)
#指定类型
a = 'dafdaf {:s} dsf {:d} {:f}' .format('alex' , 123,1.1111)
a = ' adf{name:s} dfds{age:d}'.format(**{'name':'123' , 'age' : 123})
#指定位置
a = 'dafdaf {1} dsf {0}' .format('alex' , 123) #数字可以相同 --> 'dafdaf {1} dsf {1}' .format('alex' , 123)
a = "i am {0[0]}, age {1[2]}, really {0[2]}".format([1, 2, 3], (11, 22, 33))
#映射传值
a = ' adf{name} dfds{age}'.format(**{'name':'123' , 'age' : 123})
a = ' adf{name} dfds{age}'.format(name='123' , age=123)
#修改传入数字进制(b 为二进制 o为八进制 x为字母小写的十六进制 X为字母大写的十六进制 %为百分比)
tpl = "numbers: {num:b},{num:o},{num:d},{num:x},{num:X}, {num:%}".format(num=15)

浙公网安备 33010602011771号