[推导式] 一招理解python列表/字典/集合推导式

1. 简述

  推导式可以用一行代码优雅地代替多行代码,相当于把多层for循环移到一行。

2. 详解

  先看下表达方式

a = [i*2 for i in range(30) if i % 3 is 0]
# Output: [0, 6, 12, 18, 24, 30, 36, 42, 48, 54]

a = [(x,y) for x in [1,2,3] for y in [3,1,4] if x != y]
# Output: [(1, 3), (1, 4), (2, 3), (2, 1), (2, 4), (3, 1), (3, 4)]

  一行代码包括了多层循环和各种条件,简洁方便。

  推导式相当于按顺序把上下文逻辑放在一行,以列表推导式为例,先把最后要添加进列表的变量放在开头,然后依次把循环和条件判断排成一行。

  

  

  字典同理

a = {'aa':'aaa'} 
b = {'bb':'bbb'}
c = {'cc':'ccc'}  
d = {'dd':'ddd'}
lista = [a,b,c,d]

attrs = {k:v for x in lista for k, v in x.items()}

attrs = {}
for x in lista:
    for k, v in x.items():
        attrs.update({k:v})
print attrs

  集合有去重效果

squared = {x**2 for x in [1, 1, 2]}
print(squared)
# Output: {1, 4}

3. 实例

  更复杂的结构道理相同

a = [1,2,3,4]
b = [5,6,7,8]
c = [1,3,5,7]
d = [2,4,6,8]
lista = [a,b]
listb = [c,d]
listc = [a,c]
listd = [b,d]
liste = [a,d]
listf = [b,c]

listx = [lista,listb,liste]
listy = [listc,listd,listf]
total = [listx,listy]


att = [w for x in total for y in x for z in y for w in z]
print att

b = []
for x in total:
    for y in x:
        for z in y:
            for w in z:
                b.append(w)
print b

猜你喜欢

转载自www.cnblogs.com/hellow0r1d/p/9921255.html
今日推荐