一、集合
1、定义:无序、不可随机访问、不可重复
2、可变集合(set)可增删改、不可变集合(frozenset)不能
3、可变集合生成:
s={x,x,x}
s=set(iterable),可迭代(若可迭代对象为字典,集合内只有key)
集合推导式:s=set(x for x in range(m,n) if x % 2 == 0)
s={x for x in range(m,n) if x % 2 == 0}
4、不可变集合生成:
s=frozenset(iterable)可迭代
s=frozenset(x for x in range(m,n) if x % 2 == 0)
5、注意
(1)创建空集合不能s={}会被识别为字典,只能用set()、frozenset()
(2)集合中元素要为不可变类型(可哈希)
(3)集合中元素不重复,重复会被合并
6、单个集合操作
(1)增:s.add(不可变类型)
(2)删:
s.remove(ele)返回值为None,ele存在则删,不存在报错
s.discard(ele)返回值为None,ele存在则删,不存在不操作
s.pop()返回弹出数值,删除随机数值(因为集合无序)
s.clear()清空集合中所有元素
(3)改,无法更改,因为元素是不可变类型
(4)查:无法通过索引或key查询,只能通过for in和迭代器进行遍历,可变集合与不可变集合相同,迭代器上一篇有写。
7、多个集合操作
(1)交:s.intersection(s1),若为可变集合和不可变集合做运算,谁在左边,结果就是哪种类型;s&s1也可以,谁在左边,结果就是哪种类型;s.intersection_update(s1)会将结果赋值到s中,故s一定得是可变集合类型。
(2)s.intersection(iterable)说明集合可以和可遍历类型交集,但原理是要将iterable转换为集合类型再做交集,故iterable内元素也需要为不可变类型(可哈希),不然会报错。
(3)并:与交类似,union()、"|"、update()
(4)差:与上述同,difference()、"-"、difference_update()
(5)判定:isdisjoint()判定俩集合不相交、issuperset()判定一个集合是否包含另一个集合、issubset()判定一个集合是否包含于另一个集合
二、时间日历(开发过程中可能常用)
1、time模块
(1)时间戳(浮点数):从0时区的1970年1月1日0时0分0秒起,到所给定日期时间的秒数
获取方式:
print(time.time())
(2)时间元组(tm_year=年, tm_mon=月, tm_mday=日, tm_hour=时, tm_min=分, tm_sec=秒, tm_wday=这周的第几天, tm_yday=今年的第几天, tm_isdst=是否时夏令时)
获取方式:
print(time.localtime(second)) #second放时间戳
(3)格式化时间,可以对时间戳、时间元组进行格式化
time.ctime() #对时间戳格式化;time.asctime() #对时间元组格式化;
(4)时间元组=>格式化日期。time.strftime(格式化字符串,时间元组),字符串格式format化时间,自定义格式对时间进行格式化。完整格式符含义这里写了:Python中时间和日期格式化符号 开源地理空间基金会中文分会 开放地理空间实验室 (osgeo.cn)
(5)格式化日期=>时间元组。time.strptime(日期字符串,格式化字符串)
(6)格式化日期=>时间元组。time.mktime(时间元组)
(7)获取CPU时间,可用于统计一段程序非执行耗时。time.perf_counter()返回浮点数
(8)休眠n秒。time.sleep(n)比如输出太频繁了可以减慢输出频率。
2、calendar模块,提供与日历相关的功能,eg:获取某月日历calendar.month(year,month)
3、datetime模块,处理时间和日期的标准库,还可以进行计算操作,eg:date类、time类。
(1)获取当天日期(模块.类.方法)
print(datetime.datetime.now()) print(datetime.datetime.today())
(2)获取当前年月日时分秒,第一点中的type(datetime.datetime.now())类型为datetime.datetime,是一个对象,故获取此对象中具体属性可以通过(对象.属性)获得,eg:
t = datetime.datetime.now() print(t.year)
(3)计算给定增量时间后的新日期,eg:t+datetime.timedelta(days=7),timedelta指时间增量。
(4)计算两日期之间的时间差,直接用时间对象相减得到间隔类型<class 'datetime.timedelta'>,如果想将delta换算为其他单位可以delta.total_seconds()