一、set 集操作
-
set 翻译为集合,collection翻译为集合类型,是一个大概念
set 是可变的,无序的,不重复的元素的集合 -
set() –> 定义一个空集合>>> s4 = {} 定义的是一个字典
>>> s4 = {9,10,11} 定义的是一个 set
>>> s4 = {(1,2),10,’a’} 定义的是一个 set
>>> s4 = {[1],(1),1} 定义不成功,因为 list 是可变类型,不能哈希 -
set 元素的特性set 的元素要求必须可以 hash目前学过的不可 hash 的类型有 list、set元素不可以索引set 可以迭代
-
增加add(elem)增加一个元素到 set 中如果元素存在,什么都不做update(*others)合并其他元素到 set 集合中来参数 other 必须是可迭代对象就地修改
-
删除remove(elem)从 set 中移除一个元素元素不存在,抛出 KeyError 异常discard(elem)从 set 中移除一个元素元素不存在,什么都不做pop() –> item移除并返回任意的元素空集返回 KeyError 异常clear()移除所有元素
-
修改、查询要么删除,要么加入新的元素,因为不允许重复,如果能放进去,肯定不一样,所以无法修改非线性结构,因为无法索引,所以无法查询可以迭代所有元素
-
成员运算符的比较in 和 not in 判断元素是否在 set 中,效率极快,因为相当于先 hash 一下,根据索引来查找的,效率是 O(1)
-
集合运算并集:A∪B,union(*others) 等同于 |,即返回一个新的集合;update(*others) 等同于 |=,即就地修改交集:A∩B,intersection(*others) 等同于 &,即返回一个新的集合;intersection_update(*others) 等同于 &=,即就地修改差集:A-(A∩B),difference(*others) 等同于 – ,即返回一个新的集合;difference_update(*others) 等同于 -=,即就地修改对称差集:(A-(A∩B)) + (B-(A∩B)),symmetric_difference(other) 等同于 ^,即返回一个新的集合;symmetric_difference_update(other) 等同于 ^=,即就地修改issubset(other) 即 <=isuperset(other) 即 >=isdisjoin(other) 判断当前集合和另一个集合没有交集,如果没有,则返回 True
二、封装和解构
-
x,y = y,x 先把等号右边的封装起来组成一个元组,然后左边再解构,赋予对应的值
-
解构把线性结构的元素解开,并顺序的赋给其它变量左边接纳的变量数要和右边解开的元素个数一致使用 *变量名 接收,但不能单独使用被 *变量名 收集后组成一个列表head,*mid,tail = “abcdefgh”>>> mid –> [‘b’, ‘c’, ‘d’, ‘e’, ‘f’, ‘g’]>>> type(mid) –> list
-
丢弃变量这是一个惯例,是一个不成文的约定,不是标准如果不关心一个变量,就可以定义改变变量的名字为 __ 是一个合法的标识符,也可以作为一个有效的变量使用,但是定义成下划线就是希望不要被使用,除非你明确知道这个数据需要使用_ 这个变量本身无任何语义,没有任何可读性,所以不是用来给人使用的Python 中很多库,都使用这个变量,使用十分广泛,请不要在不明确变量作用域的情况下,使用 _ 导致和库中 _ 冲突
-
练习环境变量 JAVA_HOME = /usr/bin,返回环境变量名和路径first,*_,second = “JAVA_HOME=/usr/bin”.partition(“=”)print(first)print(second)
三、切片
- 支持负索引
- 超过上界(右边界),就取到末尾;超过下界(左边界),取到开头
- start 一定要在 stop 的左边
- [:] 表示从头到尾,全部元素被取出,等效于 copy() 方法
- [start:stop:step] step 要和 start:stop 同向,否则返回空序列
四、format函数
-
format 函数格式字符串语法:“{} {×××}”.format(*args,**kwargs) –> stragrs 是位置参数,是一个元组kwargs 是关键字参数,是一个字典花括号表示占位符{}表示按照顺序匹配位置参数,{n}表示取位置参数索引为 n 的值{×××} 表示在关键字参数中搜索名称一致的{{}} 表示打印花括号
-
位置参数:”{}:{}”.format(‘192.168.1.100’,8888),这就是按照位置顺序用位置参数替换前面的格式字符串中的占位符关键字参数或命名参数:”{server} {1}:{0}”.format(8888,’192.168.1.100′,server=’Web Server Info:’),位置参数按照序号匹配,关键字参数按照名词匹配访问元素:”{0[0]}.{0[1]}”.format((‘magedu’,’com’))对象属性访问:from collections import namedtuplePoint = namedtuple(‘Point’,’x y’)p = Point(4,5)“{{{0.x},{0.y}}}”.format(p)
-
对齐‘{0}*{1}={2}’.format(3,2,2*3)‘{0}*{1}={2:<2}’.format(3,2,2*3) 左对齐‘{0}*{1}={2:>05}’.format(3,2,2*3) 右对齐,且不够的位置补 0‘{:*^30}’.format(‘centered’) 居中,且不够的位置补 *
-
进制>>> “int:{0:d}; hex:{0:x}; oct:{0:o}; bin:{0:b}”.format(42)‘int:42; hex:2a; oct:52; bin:101010’>>> “int:{0:d}; hex:{0:#x}; oct:{0:#o}; bin:{0:#b}”.format(42) #的作用是会将不同类型的数据加上相应的前缀‘int:42; hex:0x2a; oct:0o52; bin:0b101010’
-
浮点数>>> print(“{}”.format(3**0.5))1.7320508075688772>>> print(“{:g}”.format(3**0.5))1.73205>>> print(“{:f}”.format(3**0.5))1.732051>>> print(“{:10f}”.format(3**0.5)) 右对齐1.732051>>> print(“{:2}”.format(102.231)) 宽度为2,本来数字宽度已超过2,此参数等于无效102.231>>> print(“{:.2}”.format(3**0.5)) 2个有效数字1.7>>> print(“{:.2f}”.format(3**0.5)) 小数点后2位1.73>>> print(“{:3.2f}”.format(3**0.5)) 宽度为3,小数点后2位1.73>>> print(“{:3.3f}”.format(0.2745)) 宽度为3,小数点后3位,因为精度的原因所以才超过宽度0.275>>> print(“{:3.3%}”.format(1/3))33.333%
本文来自投稿,不代表Linux运维部落立场,如若转载,请注明出处:http://www.178linux.com/93839