推导式
推导式是Python中很强大的、很受欢迎的特性,具有语言简洁,速度快等优点。推导式包括:
1.列表推导式
2.字典推导式
3.集合推导式”’
一、列表推导式
使用[]生成list
例子一
numbers = []
for x in range(100):
if x % 3 == 0:
使用推导实现
numbers = [x for x in range(100) if x % 3 == 0]
例子二
def squared(x):
return x*x
multiples = [squared(i) for i in range(30) if i % 3 is 0]
print(multiples)
例子三
使用()生成generator将俩表推导式的[]改成()即可得到生成器。
multiples = (i for i in range(30) if i % 3 is 0)
print(type(multiples))
二、字典推导式
字典推导和列表推导的使用方法是类似的,只不中括号该改成大括号。直接举例说明:
例子一:
快速更换key和value
mcase = {'a': 10, 'b': 34}
mcase_frequency = {v: k for k, v in mcase.items()}
print(mcase_frequency)
三、集合推导式
它们跟列表推导式也是类似的。 唯一的区别在于它使用大括号{}。
squared = {x**2 for x in [1, 1, 2]}
print(squared)
例子一:
用集合推导建字符串长度的集合
strings = ['a','is','with','if','file','exception']
{len(s) for s in strings} #有长度相同的会只留一个,这在实际上也非常有用
# Output: set([1, 2, 4, 9])
综合练习
1.将单词长度大于3的转为大写输出
names = ['bob','tom','alice','jerry','wendy','smith']
print([name.upper() for name in names if len(name)>3])
2.求(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]
3.求m中3,6,9组成的列表
m = [[1,2,3],[4,5,6],[7,8,9]]
[row[2] for row in m]
#或
[m[row][2] for row in (0,1,2)]
4: 求m中斜线1,5,9组成的列表
[[1, 2, 3], [4, 5, 6], [7, 8, 9]]
[m[i][i] for i in range(len(m))]
5.求m,n中矩阵和元素的乘积
m = [[1,2,3],[4,5,6],[7,8,9]]
n = [[2,2,2],[3,3,3],[4,4,4]]
[m[row][col]*n[row][col] for row in range(3) for col in range(3)]
[[m[row][col]*n[row][col] for col in range(3)] for row in range(3)]
[[m[row][col]*n[row][col] for row in range(3)] for col in range(3)]
6.结合两个列表的元素,如果元素之间不相等的话combs = []
for x in [1,2,3]:
for y in [3,1,4]:
if x != y:
combs.append((x, y))
#推导
[(x, y) for x in [1,2,3] for y in [3,1,4] if x != y]