“这是我参与更文挑战的第3天,活动详情查看: 更文挑战”
高效的推导式
列表推导式
列表推导式的语法形式非常简单,如下所示
[生成表达式 for 变量 in 序列或迭代对象]
最外层的方括号是列表的标志性身份,它表明这个表达式的结果是生成一个列表,故称列表推导式(list comprehensions)。在功能上,方括号内描述的列表推导式相当于一个循环,只不过形式更加简洁罢了。
下面,我们再用几个示例来说明列表推导式的强大功能
1.过滤原始序列中不符合条件的元素
在列表推导式中,我们可以通过if语句的逻辑判断,筛选符合条件的元素。例如,如果我们想把一个列表中的整数提取出来,并做平方处理,
aList = []
for x in range(4):
aList.append(x**2)
复制代码
2.使用列表推导式实现嵌套列表的平铺
在前面的列表推导式例子里,我们仅使用一层for循环来产生新的列表。事实上,我们也可以使用两层for循环。下面的代码就是利用两层for循环将嵌套列表平铺成一个列表的示例。
vec = [[1,2,3],[4,5,6],[7,8,9]]
flat_vec = [num for elem in vec for num in elem]
print(flat_vec)
复制代码
得到结果
[1,2,3,4,5,6,7,8,9]
在前面的列表推导式例子里,我们仅使用一层for循环来产生新的列表。事实上,我们也可以使用两层for循环。下面的代码就是利用两层for循环将嵌套列表平铺成一个列表的示例。
3.多条件组合构造特定列表
如前所述,列表推导式包含一对括号,在括号中有一个输出表达式,表达式后面紧跟一条for语句,然后是0条或多条for语句、if语句,通过各种组合,能够构造出各类高阶列表。例如,下面的列表推导式将两个不同列表中的元素整合到了一起。
new_list = [[x,y] for x in [1,2,3] for y in [3,1,4] if x!=y]
print(new-list)
复制代码
得到结果
[(1,3),(1,4),(2,3),(2,1),(2,4),(3,1),(3,4)]
需要注意的是,如果表达式是一个元组,如In [12]处的(x,y),那么必须得给它加上括号。
4 字典推导式
字典推导式和列表推导式的使用方法比较类似,不过是把列表的标志——一对方括号[],变更为字典的标记——一对花括号{}。举例说明,下面代码的功能是交换原有字典的键和值。
mcase = {'a':10,'b':30,'c':50}
kv-exchange = {v: k for k, v in mcase.items()}
print(kv_exchange)
复制代码
得到结果
{10:’a’,30:’b’,50:’c’}
上述代码的In [2]处使用了字典的items()方法,它会返回一个支持遍历操作的列表,列表中是诸如(键0,值0)、(键1,值2)这样的小元组。