知识点 : Markdown 字典 datetime模块 内置方法与同名系统函数对比 生成器表达式和列表解析式对比
Markdown
一级标题
二级标题
斜体
加粗
删除线
有序列表
- 第一条
- 第二条
- 第三条
分割线以上
分割线以下
有序多级列表
- 1
- 1.1
- 1.2
- 2
- 3
- 3.1
- 3.2
- 3.3
无序多级列表
- 1
- 1.1
- 1.2
- 1.3
- 2
- 3
- 3.1
- 3.2
- 4
链接
python官网
插入图片
代码块(三个反引号)
def tri(n):
for i in range(1,n+1):
# for i in range(12,0,-1):
line=''
# lst=[]
for j in range(i,0,-1):
line+=' '+str(j)
# lst.append(len(line))
print('{:>27}'.format(line))
# print(line.rjust(max(lst)))
# print(max(lst))
表格
none | 历史系 | 机电系 |
---|---|---|
男 | 2 | 97 |
女 | 98 | 3 |
字典dict
由键值对key-value组成的数据集合
特点 : 可变 无序 key唯一
增:
- 定义/初始化: d={‘a’:10,’b’:20,’c’:None,’d’:[1,2,3]}
- 定义默认值: d = dict.fromkeys(range(5),0)
- d[key] = value 覆盖旧值 添加新值
- d.update(red=1)
- e={‘a’:1 ,’f’:666} d.update(e)
删
- pop(key[, default])
key存在则移除它并返回value
key不存在则返回给定的default
default未设置,key不存在则抛出KeyError异常 - popitem()
移除并返回一个任意的键值对
字典为empty,抛出KeyError异常 - clear() 清空字典
改
- d[key] = value 覆盖旧值 添加新值
查
- d[key] 返回key对应的值value 不存在则抛KeyError异常
- d.get(‘d’,223) 返回key的对应value 不存在则返回默认值223 不指定默认值则返回None
- d.setdefault(‘e’,223) 返回key的对应value 不存在则写入默认值223字典并返回 不指定默认值则为None
字典遍历
- for i in d: 等价于for i in d.keys():
- for i in d.values()
- for k,v in d.items()
注意:遍历字典时不可改变字典长度(不允许增删操作)
可在遍历时判断value 并记录欲移出的key
再次循环key 用pop(key)移除
d = dict(a=1, b=2, c='abc')
keys = []
for k,v in d.items():
if isinstance(v, str):
keys.append(k)
for k in keys:
d.pop(k)
print(d)
- 字典key的要求和set的元素要求一致
- set的元素可以理解为key,set可以看做dict的简化版
- 可哈希(hashable)才可以作为key,可以使用hash()函数测试
d = {1 : 0, 2.0 : 3, “abc” : None, (‘hello’, ‘world’, ‘python’) : “string”, b’abc’ : ‘135’}
import collections
collections.defaultdict([default_factory[, …]])
- default_factory提供一个初始化函数。当key不存在的时候,会调用这个工厂函数来生成key对应的value
- collections.defaultdict(int) #初始化字典 默认value为0
sort与reverse列表方法与系统函数对比
none | list方法 | 系统函数 |
---|---|---|
sort | 就地修改 默认升序 返回值为None | 原列表不变 默认升序 返回值为升序列表 |
reverse | 就地反转 返回值为None | 原列表不变 返回值为反转迭代器 |
标准库datetime
datetime类
类方法:
- datetime.datetime.now(tz=None) 返回当前时间的datetime对象,时间到微秒
- datetime.datetime.utcnow() 没有时区的当前时间
日期格式化
类方法
- strptime(date_string, format) ,返回datetime对象
import datetime - dt = datetime.datetime.strptime(“21/11/06 16:30”, “%d/%m/%y %H:%M”)
- print(dt.strftime(“%Y-%m-%d %H:%M:%S”))
- print(“{0:%Y}/{0:%m}/{0:%d} {0:%H}::{0:%M}::{0:%S}”.format(dt))
timedelta对象
timedelta = datetime1 - datetime2
构造方法
- datetime.timedelta(days=0, seconds=0, microseconds=0, milliseconds=0,
minutes=0, hours=0, weeks=0) - year = datetime.timedelta(days=365)
- total_seconds() 返回时间差的总秒数
列表解析式List Comprehension
- 语法:[返回值 for 元素 in 可迭代对象 if 条件] 返回一个新的列表
- 列表解析式是一种语法糖 由编译器优化,提高效率
- [expr for i in iterable1 for j in iterable2 ]等价于
ret = []
for i in iterable1:
for j in iterable2:
ret.append(expr)
[(x, y) for x in ‘abcde’ for y in range(3)]
[[x, y] for x in ‘abcde’ for y in range(3)]
[{x: y} for x in ‘abcde’ for y in range(3)]
以上输出结果为 : ‘abcde’与0 1 2 的排列组合分别组成元组 列表 字典[(i,j) for i in range(7) if i>4 for j in range(20,25) if j>23]
[(i,j) for i in range(7) for j in range(20,25) if i>4 if j>23]
[(i,j) for i in range(7) for j in range(20,25) if i>4 and j>23]
以上三条语句输出结果相同 说明for与if语句无先后顺序之分 且if语句嵌套if语句可简化为 if1 AND if2
生成器表达式Generator expression
- 语法:(返回值 for 元素 in 可迭代对象 if 条件)
- 返回一个生成器Generator
生成器表达式和列表解析式的区别:
none | 生成器表达式 | 列表解析式 |
---|---|---|
求值策略 | 惰性求值 | 立即返回 |
返回结果 | 生成器对象 只迭代一次 | 可迭代对象 可多次迭代 |
集合解析式
- {返回值 for 元素 in 可迭代对象 if 条件}
- {(x,x+1) for x in range(10)}
- {[x] for x in range(10)} #错误 集合内必须为可哈希对象 列表不可哈希
字典解析式
- {返回值 for 元素 in 可迭代对象 if 条件}
使用key:value形式
{x:(x,x+1) for x in range(10)}
{x:[x,x+1] for x in range(10)}
{(x,):[x,x+1] for x in range(10)}
{[x]:[x,x+1] for x in range(10)} #错误 key必须可哈希
{chr(0x41+x):x**2 for x in range(10)}
{str(x):y for x in range(3) for y in range(4)}
虽说是3x4的排列组合 但x作为key具有唯一性 因此value只会留下最后一次的结果3 {‘0’: 3, ‘1’: 3, ‘2’: 3}