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)

 

posted @ 2018-12-10 18:28  Matrixssy  阅读(251)  评论(0)    收藏  举报