Python第三周 学习笔记(1)
2018-04-08 16:19
197 查看
字典
key-value键值对的数据的集合可变的、无序的、key不重复
初始化:
d = dict() d = {} d = dict(**kwargs) 如:d = dict(a=1,b=2) dict(iterable, **kwarg)
使用可迭代对象和name=value对构造字典,不过可迭代对象的元素必须是一个二元结构
dict(mapping, **kwarg) dict.fromkeys(iterable, value)
字典元素的访问
d[key]返回key对应的值value
key不存在抛出KeyError异常
get(key[, default])
返回key对应的值value
key不存在返回缺省值,如果没有设置缺省值就返回None
setdefault(key[, default])
返回key对应的值value
key不存在,添加kv对,value为default,并返回default,如果default没有设置,缺省为None
字典增加和修改
d[key] = value将key对应的值修改为value
key不存在添加新的kv对
update([other]) -> None
使用另一个字典的kv对更新本字典
key不存在,就添加
key存在,覆盖已经存在的key对应的值
就地修改
d.update(red=1) d.update((('red',2),)) d.update({'red':3})
字典删除
pop(key[, default])key存在,移除它,并返回它的value
key不存在,返回给定的default
default未设置,key不存在则抛出KeyError异常
popitem()
移除并返回一个任意的键值对
字典为empty,抛出KeyError异常
clear()
清空字典
del语句
本质上减少了一个对象的引用,del 实际上删除的是名称,而不是对象
字典遍历:
遍历key:for k in d: print(k) for k in d.keys(): print(k)
遍历values:
for k in d: print(d[k]) for k in d: print(d.get(k)) for v in d.values(): print(v)
* 遍历item,即kv对:
for item in d.items(): print(item) for item in d.items(): print(item[0], item[1]) for k,v in d.items(): print(k, v) for k, _ in d.items(): print(k) for _ ,v in d.items(): print(v)
总结
Python3中,keys、values、items方法返回一个类似一个生成器的可迭代对象,不会把函数的返回结果复制到内存中Dictionary view对象
字典的entry的动态的视图,字典变化,视图将反映出这些变化
字典遍历和移除
遍历字典时,不允许增删元素可先记录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)
defaultdict
collections.defaultdict([default_factory[, ...]])第一个参数是default_factory,缺省是None,它提供一个初始化函数。当key不存在的时候,会调用这个工厂函数来生成key对应的value
ordereddict
collections.OrderedDict([items])key并不是按照加入的顺序排列,可以使用OrderedDict记录顺序
标准库datetime
datetime模块
datetime类today()
返回本地时区当前时间的datetime对象
now(tz=None)
返回当前时间的datetime对象,时间到微秒,如果tz为None,返回和today()一样
fromtimestamp(timestamp, tz=None) 从一个时间戳返回一个datetime对象
日期格式化
类方法 strptime(date_string, format) ,返回datetime对象
对象方法 strftime(format) ,返回字符串
字符串format函数格式化
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对象
与datetime对象做加减运算
datetime.timedelta(days=0, seconds=0, microseconds=0, milliseconds=0,minutes=0, hours=0, weeks=0)
total_seconds() 返回时间差的总秒数
标准库time
time.sleep(secs) 将调用线程挂起指定的秒数
列表解析式
语法[返回值 for 元素 in 可迭代对象 if 条件]
使用中括号[],内部是for循环,if条件语句可选
返回一个新的列表
列表解析式是一种语法糖
编译器会优化,不会因为简写而影响效率,反而因优化提高了效率
减少程序员工作量,减少出错
简化了代码,但可读性增强
列表解析进阶
[expr for item in iterable if cond1 if cond2]等价于
ret = [] for item in iterable: if cond1: if cond2: ret.append(expr)
[expr for i in iterable1 for j in iterable2 ]
等价于
ret = [] for i in iterable1: for j in iterable2: ret.append(expr)
生成器表达式
(返回值 for 元素 in 可迭代对象 if 条件)生成器表达式是按需计算(或称惰性求值、延迟计算),需要的时候才计算值
列表解析式是立即返回值
生成器是可迭代对象、迭代器
使用next(itetator)迭代
生成器迭代与列表迭代对比
生成器延迟计算
返回迭代器,可以迭代
从前到后走完一遍后,不能回头
列表
立即计算
返回的不是迭代器,返回可迭代对象列表
从前到后走完一遍后,可以重新回头迭代
计算方式
生成器表达式延迟计算,列表解析式立即计算
内存占用
单从返回值本身来说,生成器表达式省内存,列表解析式返回新的列表
生成器没有数据,内存占用极少,但是使用的时候,虽然一个个返回数据,但是合起来占用的内存也差不多
列表解析式构造新的列表需要占用内存
计算速度
单看计算时间看,生成器表达式耗时非常短,列表解析式耗时长
但是生成器本身并没有返回任何值,只返回了一个生成器对象
列表解析式构造并返回了一个新的列表
集合解析式
{返回值 for 元素 in 可迭代对象 if 条件}立即返回一个集合
字典解析式
{返回值 for 元素 in 可迭代对象 if 条件}使用key:value形式
立即返回一个字典
内建函数
标识 id返回对象的唯一标识,CPython返回内存地址
哈希 hash()
返回一个对象的哈希值
类型 type()
返回对象的类型
类型转换
float() int() bin() hex() oct() bool() list() tuple() dict() set() complex() bytes() bytearray()
输入 input([prompt])
接收用户输入,返回一个字符串
打印 print(*objects, sep=' ', end='\n', file=sys.stdout, flush=False)
打印输出,默认使用空格分割、换行结尾,输出到控制台
对象长度 len(s)
返回一个集合类型的元素个数
isinstance(obj, class_or_tuple)
判断对象obj是否属于某种类型或者元组中列出的某个类型
isinstance(True, int)
issubclass(cls, class_or_tuple)
判断类型cls是否是某种类型的子类或元组中列出的某个类型的子类
issubclass(bool, int)
绝对值abs(x)
x为数值
最大值max() 最小值min()
返回可迭代对象中最大或最小值
返回多个参数中最大或最小值
round(x)
四舍六入五取偶,round(-0.5)
pow(x , y)
等价于 x**y
range(stop)
从0开始到stop-1的可迭代对象;range(start, stop[, step])从start开始到stop-1结束步长为step的可迭代对象
divmod(x, y)
等价于 tuple (x//y, x%y)
sum(iterable[, start])
对可迭代对象的所有数值元素求和
sum(range(1,100,2))
chr(i)
给一个一定范围的整数返回对应的字符
ord(c)
返回字符对应的整数
sorted(iterable[, key][, reverse]) 排序
返回一个新的列表,默认升序
reverse反转
翻转 reversed(seq)
返回一个翻转元素的迭代器
枚举 enumerate(seq, start=0)
迭代一个序列,返回索引数字和元素构成的二元组
*start表示索引开始的数字,默认是0
迭代器和取元素 iter(iterable)、next(iterator[, default])
iter将一个可迭代对象封装成一个迭代器
next对一个迭代器取下一个元素。如果全部元素都取过了,再次next会抛StopIteration异常
拉链函数zip(*iterables)
像拉链一样,把多个可迭代对象合并在一起,返回一个迭代器
将每次从不同对象中取到的元素合并成一个元组
木桶原理,取最小迭代次数迭代
可迭代对象
能够通过迭代一次次返回不同的元素的对象。所谓相同,不是指值是否相同,而是元素在容器中是否是同一个,例如列表中值可以重复的,['a','a'],虽然这个列表有2个元素,值一样,但是两个'a'是不同的元素
可以迭代,但是未必有序,未必可索引
可迭代对象有:list、tuple、string、bytes、bytearray、range、set、dict、生成器等
可以使用成员操作符in、not in,in本质上就是在遍历对象
迭代器
特殊的对象,一定是可迭代对象,具备可迭代对象的特征通过iter方法把一个可迭代对象封装成迭代器
通过next方法,迭代 迭代器对象
生成器对象,就是迭代器对象
相关文章推荐
- Python第三周 学习笔记(2)
- Python学习笔记之支持向量机SVM实例,及SVC参数介绍
- Python学习笔记之条件、循环和其他语句
- python学习笔记(3)Iteration and Loop
- python 基础学习笔记(一)
- python学习笔记(二)
- Python学习笔记——生成器
- 【python学习笔记】关于sys.path与pythonpath
- Python学习笔记——可变类型&不可变类型&深拷贝&浅拷贝
- Python.Numpy学习零碎笔记之便捷函数
- python学习笔记--生成器
- Python 正则式学习笔记 [转]
- 流畅的python学习笔记:第十一章:抽象基类
- python 系统学习笔记(二)---string
- Python基础教程 第5章: 条件、循环和其他语句 学习笔记
- Python学习笔记(6)测试
- python 系统学习笔记(十一)---sys
- Python之网络爬虫学习笔记
- python 3 学习笔记:函数-lambda
- Python Tutorial 学习笔记3 -- Python Data Structures