集 Set集
Set set 翻译为集合
collection 翻译为集合类型,是一个大概念
set 是可变的 无序的 不重复的 元素集合
set() 定于一个空集合
set(iterable) 括号里面是可迭代对象
set() 集合里不可以放入可变元素
set()的元素要求必须可以hash
目前学过的不可hasb的类型有list,set
元素不可以索引
set可以迭代
Set 增加
add(elem) 增加一个元素到set
如果元素存在,什么都不做
update(*others)
合并其他元素set集合中来
参数others必须是可迭代对象
就地修改
Set 删除
remove(elem)
从set中移除一个元素,元素不存在,抛出KeyError异常
discard(elem) 从set中移除一个元素,元素不存在,什么都不做
pop() –> item 移除并返回任意的元素,空集返回keyerror异常
clear() 移除所有元素
Set 修改,查询
修改,要么删除,要么加入新的元素
非线性结构无法查询
遍历
可迭代所有元素
成员运算符
in和not in 判断元素是否在set中
Set和线性结构
线性结构的查询时间复杂度是O(n),即随着数据规模的增大而增加耗时 set、dict等结构,内部使用hash值作为Key,时间复杂度可以做到O(1) 查询时间和数据规模无关
可 hash
数值型 int、float、complex
布尔型 True false
字符串 string bytes
tuple
None
以上都是不可变类型,成为可哈希类型,hashable
set的元素必须是可hash的
集合基本概念
全集:所有元素的集合,例如实数,所有实数组成的集合就是全集
子集subset和超集superset:一个集合A的所有元素都在另一个集合B内,A是B的子集,B是A的集
真子集和真超集:A是B的子集,且A不等于B,A就是B的真子集,B是A的真超集
并集:多个集合合并的结果
交集:多个集合公共部分
差集:集合中除去和其他集合公共部分
封装和解构
封装
将多个值使用逗号分割,组合在一起 本质上,返回一个元组,只是省掉了小括号
t1 = (1,2) #定义为元组 t2 = 1,2 #将1和2封装成元组 type(t1) type(t2)
封装
a = 4
b = 5
temp = a
a = b
b = temp
等价于 a,b = b,a
解构
把线性结构的元素解开,并顺序的献给其他 变量 左边接纳的变量数要喝右边解开的元素个数一致
lis = [2,3]
first,second = lis
print(first,second)
Python3 的解构
使用 *变量名 接收,但不能单独使用 被 *变量名 收集后组成一个列表
lis = list(range(1,101,2))
head,*mid,stil = lis
变量丢弃
如果不关心一个变量,就可以改变量的名字为 “_”
set的元素必须可以hash
小集合运算 大集合 考虑内存
集合运算
并集:将两个集合A和B的所有元素合并到一起,组成的集合称作集合A与集合B的并集
s1 = {1,2,3}
s2 = {2,3,4}
s = s1 | s2 –>{1,2,3,4}
交集:将两个集合A和B的所有的元素合并到一起,组成的集合称作集合A与集合B的并集
s1 = {1,2,3}
s2 = {2,3,4}
s = s1&s2 –> {2,3}
差集:将集合A和B,由所有属于A且不属于B的元素组成的集合
s1 = {1,2,3}
s2 = {2,3,4}
s = s1-s2 –> {1} s = s2-s1 –> {4}
对称差集:集合A和B,由所有不属于A和B的交集元素组成的集合
s1 = {1,2,3}
s2 = {2,3,4}
s = s1^s2 –> {1,4}
issbset(other) <=
判断当前集合是否是另一个集合的子集
set1 < set2
判断set1是否是set2的真子集.
issuoerset(other) >=
判断当前集合是否是other的超集
set1 < set2
判断set1是否是set的真超集
isdisjoint(other)
当前集合和另一个集合没有交集
没有交集,返回True
字典 dictionarise 字典是一个 可变的 无序的 Key不重复的 类方法
dict.formkeys(range(5))
dict.formkeys(rang(5),0)
字典的访问
d[key]
返回key对应的值vlue key不存在抛出KeyError异常
get(key[,default])
返回key对应的value key不存在返回缺省值,如果没有设置缺省值就返回None
setdefault(key[,defasult])
返回key对应的值value key不存在,增添kv对,value为default,并返回default,如果default没有设置,缺省为None
d = {‘a’:’1′,’b’:’2′} e = {‘x’:’3′,’z’:’4′}
d.setdefault(‘d’,10)
print(d)
d.get(‘d’)
字典增加和修改
d[key] = value 将key对应的值修改为value
key 不存在增加新的kv对
update([other]) –> None
使用另一个字典的kv对更新本字典 key 不存在,就添加 key存在,覆盖已经存在的key对应的值 就地修改
d = {‘a’:’1′,’b’:’2′}
e = {‘x’:’3′,’z’:’4′}
d.update(e)
print(d)
d.update(e)
print(d)
d = {‘a’:’1′,’b’:’2′}
e = {‘x’:’3′,’z’:’4′}
d.update({‘red’:55})
print(d)
字典的删除
pop(key[,default])
key存在,移除它,并返回它的value
key不存在,返回给定的default
popitem()
移除并返回一个任意的键值对
字典为empty,跑出keyError
clear() 清空字典
字典遍历
for .. in dict
遍历 key
for k in d:
print(k)
for k in d.keys():
print(k)
遍历 value
for k in d:
print(k)
for k in d.keys():
print(d.get(k))
字典的key hashable 可哈希才可以作为key
collections.defaultdict([default_factory[,…]])
第一个参数是default_factory,缺省是None,他提供一个初始化函数,当key不存在的时候,会调用这个工厂函数来生成key对应的value
collections.OrderedDict([items])
key 并不是按照加入的顺序排列,可以使用OrdereDict记录顺序 有序字典可以记录匀速插入的顺序,打印的时候也是按照这个顺序输出打印
标准库
datetime模块
对日期、时间、时间戳的处理
datetime类
类方法方
today()返回本地时区当前时间的datetime对象
now(tz=None)返回当前时间的datetime对象,时间到微妙,如果tz为None,返回和today()一样
utcnow()没有时区的当前时间
fromtimestamp(timestamp,tz=None)从一个时间戳返回一个datetime对象
datetime对象
timestamp()返回一个到微妙的时间戳
时间戳:格林威治时间1970年1月1日0点到现在的秒数
datetime对象
构造方法 datetime.datetime(2016,12,66,16,29,43,79043)
year、month、day、hour、minute、second、microsecond,取datetime对象的年月日时分秒及微妙 weekday() 返回星期的天,周一0,周日6
isoweekday() 返回星期的天,周一1,周日7
date() 返回日期date对象
time() 返回时间time对象
replace() 修改并返回新的时间
isocalendar() 返回一个三元组(年,周数,周的天)
列表解析
生成一个列表0-9,对每一个元素自增1后求平方根返回新的列表
l = [(i+1)**2 for i in (range(10))]
print(l)
print(type(l))
语法
[返回值 for 元素 in 可迭代对象 if]
使用中括号[], 内部是for循环, if条件语句可选 返回一个新的列表
列表解析进阶
[expr for item in iterable if cond1 if cond2]
[i for i in range(10) if x%2==0 and if x%3==0]
[exper for i in iterable1 for j in iterable2] [(x,y) for x in ‘abcde’ for y in range(3)]
生成器
语法(返回值 for 元素 in 可迭代对象 if 条件)
列表解析式的中括号换成小括号就行了
返回一个生成器 延迟计算
返回迭代器,可以迭代
从前到后走完一遍,不能回头
和列表解析式的区别
生成器表达式是按需计算(或称惰性求职、延迟计算),需要的时候才计算
列表解析式是立即返回值
生成器表达式省内存,列表解析式返回新的列表
集合解析式
{返回值 for 元素 in 可迭代对象 if条件}
列表解析式的中括号换成大括号{}就可以 立即返回一个集合
字典解析式
{返回值 for 元素 in 可迭代对象 if 条件}
列表解析式的中括号换成大括号{}就可以
使用key:value形式 立即返回一个字典
{chr(0x41+x):x**2 for x in range(10)}
内建函数
标识 id 返回对象的唯一标识,CPython返回内存地址
哈希 hash() 返回一个对象的哈希值 类型 type() 返回对象的类型
类型转换
flot()、int()、bin()、hex()、oct()、list()、tuple()、dict()、set() 、comple()、bytes、bytearry()
输入 input() 接受用户输入,返回一个字符串
对象长度 len(s) 返回一个集合类型的元素个数
isinstance(obj,class_or_tuple) 判断对象obj是否属于某种类型或者元组中列出的某个类型 isinstance(True,int)
issubclass(cls,class_or_tuple)
判断类型cls是否是某种类型的子类或元组中列出的某个类型的子类 issubclass(bool,int)
绝对值 abx(x) x为数值
最大值 max(x) 最小值min()
round(x) 四舍六入五去偶,round(-0.5) pow(x,y)
等价于 x**y sum(iterable[,start]) 对可迭代对象的所有数值元素求和
sum(range(1,100,2))
chr(i) 给一个一定范围的整数返回对应的字符
chr(97) chr(20013) ord(‘a’) ord(‘中’) 返回字符对应的整数
sorted(iterable[,key][,reverse]) 排序
翻转 reversed(seq)
枚举
enumerate(seq,start=0) 迭代一个序列,返回索引数字和元素构成的二元组
本文来自投稿,不代表Linux运维部落立场,如若转载,请注明出处:http://www.178linux.com/87746