推导式(Derivation)

list derivation(列表推导式)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
l = [x*x for x in range(5)]
# [0, 1, 4, 9, 16] 直接返回列表而不是生成器
[i+1 if i>0 else 1 for i in l]
# [1, 2, 5, 10, 17]
[i+1 if i>0 else 2 for i in l]
# [2, 2, 5, 10, 17] # 说明 如果是取else的话,就不再去做更新的操作
[i for i in l if i >4 and i <=16] # [9,16]
vec = [[1,2,3], [4,5,6], [7,8,9]]
[num for elem in vec for num in elem]
# [1, 2, 3, 4, 5, 6, 7, 8, 9]
[(x, y) for x in [1,2,3] for y in [3,1,4] if x != y]
# [(1, 3), (1, 4), (2, 3), (2, 1), (2, 4), (3, 1), (3, 4)]
```
改变字典的值
```python
l_d = [{'name':'femn','age':25},{'name':'femnyy','age':35}]
[i if i.get('age')> 25 else i for i in l_d]
# 虽然此时不能得到自己想要的改变 不能用i['name']='femnhh'去做改变
[i.update({'name':'femnhh'}) if i.get('age')> 25 else i for i in l_d]
# [{'age': 25, 'name': 'femn'}, None] # 相当于是匹配没有匹配成功则返回None
# 但此时l_d却已经是改变成想要的了
l_d
# [{'age': 25, 'name': 'femn'}, {'age': 35, 'name': 'femnhh'}]

generator derivation(生成器推导式)

1
2
g = (x*x for x in range(5)) # 'generator' object
next(g) #

dict derivation (字典推导式)

1
2
3
4
prices = {'ACME': 45.23,'AAPL': 612.78,'IBM': 205.55,\
'HPQ': 37.20,'FB': 10.75}
p1 = {key: value for key, value in prices.items() if value > 20}
# {'ACME': 45.23, 'IBM': 205.55, 'HPQ': 37.2, 'AAPL': 612.78}
Share Comments