推导式是Python中很强大的、很受欢迎的特性,具有语言简洁,速度快等优点
1.列表推导式
2.字典推导式
3.集合推导式
整除3的数字列表
numbers = [x for x in range(100) if x % 3 == 0]
使用()生成generator将俩表推导式的[]改成()即可得到生成器
字典推导和列表推导的使用方法是类似的,只不中括号该改成大括号
快速更换key和value
mcase = {'a': 10, 'b': 34}
mcase_frequency = {v: k for k, v in mcase.items()}
集合推导式
们跟列表推导式也是类似的。 唯一的区别在于它使用大括号{}
集合推导建字符串长度的集合
strings = ['a','is','with','if','file','exception']
{len(s) for s in strings} #有长度相同的会只留一个
将单词长度大于3的转为大写输出
names = ['bob','tom','alice','jerry','wendy','smith']
print([name.upper() for name in names if len(name)>3])
求(x,y)其中x是0-5之间的偶数,y是0-5之间的奇数组成的元祖列表
[(x,y) for x in range(5) if x%2==0 for y in range(5) if y %2==1]
求m中3,6,9组成的列表
m = [[1,2,3],[4,5,6],[7,8,9]]
[i[2] for i in m]
#或
[m[i][2] for i in (0,1,2)]
求m,n中元素的乘积
m = [[1,2,3],[4,5,6],[7,8,9]]
n = [[2,2,2],[3,3,3],[4,4,4]]
[m[i][j]*n[i][j] for i in range(3) for j in range(3)]
结合两个列表的元素,如果元素之间不相等的话
[(x, y) for x in [1,2,3] for y in [3,1,4] if x != y]
生成器:
第一种方式:将列表的[]改为(),里面可以写推导
第二种方式:
通过裴波那切序列讲解:将print换成yield,每次生成一个值
然后也是可以调用next()
每到yield时,就会停止,返回当前这个值,可以一次一次next()调用
生成器的唯一注意事项就是:生成器只能遍历一次
迭代器:可以被next()调用的都为迭代器
iter返回迭代器自身,next返回容器中的下一个值,如果容器中没有更多元素了,则抛出StopIteration异常
迭代器对象从集合的第一个元素开始访问,直到所有的元素都被访问一遍后结束
迭代器特性:
1.跌代集合,字符串,有序依次———即有可迭代对象
2.线程不安全的,多线程访问同一个集合修改报错。
3.对于无法随机访问的数据结构,迭代器是唯一选择
4.只迭代当前元素,迭代前后均可不存