Python学习笔记:列表推导式

一、介绍

Python 中有个语法糖(syntactic sugar),就是 list comprehension,即“列表推导式”。

同样适用于 dictset 等一系列可迭代的数据结构。

  • 使用语法
out_list = [x for x in list if express_condition]

其中的 if 条件判断语句可有可无。

二、range函数

Pythonrange 函数可以用来创建一个整数列表,一般用在 for 循环中。

  • 使用语法
range(start, stop, [, step])
start -- 开始
stop -- 结束(不包含)
setp -- 步长

列表推导式是通过一个可迭代对象来生成列表,range 是列表推导式中最常用的可迭代对象,是精髓之一。

三、实操

1.列表推导式

  • 列表推导式会遍历可迭代对象,然后按照 for 前的表达式进行运算,生成最终的列表
  • 如果有 if 条件语句, for 遍历后紧跟着进行条件判断
  • 如果有多个 for 循环,则最终的数据数量为多个 for 循环的笛卡尔积
  • 可以进行嵌套的列表推导,与嵌套 for 循环的原理相同
[x**2 for x in range(10)]
# [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

[x**2 for x in range(10) if x > 5]
# [36, 49, 64, 81]

[x for x in range(10) if x % 2 == 0]
# [0, 2, 4, 6, 8]

[(x, x**2) for x in range(5)]
# [(0, 0), (1, 1), (2, 4), (3, 9), (4, 16)]

dict([(x, x**2) for x in range(5)])
# {0: 0, 1: 1, 2: 4, 3: 9, 4: 16}

[(x, y) for x in range(10) if x % 2 if x > 3 for y in range(10) if y > 7 if y != 8]
# [(5, 9), (7, 9), (9, 9)]

a = [2,4,6]
b = [4,3,-9]
[a[i] + b[i] for i in range(len(a))]
# [6, 7, -3]

[x * y for x in [1,2,3] for y in [1,2,3]]
# [1, 2, 3, 2, 4, 6, 3, 6, 9]

li = [1,2,3,4]
def mul2(x):
    return x*2
[mul2(i) for i in li]
# [2, 4, 6, 8]

# 嵌套循环 展平矩阵
matrix = [[1,2,3], [4,5,6], [7,8,9]]
[i for row in matrix for i in row]
# [1, 2, 3, 4, 5, 6, 7, 8, 9]

2.字典(dict)和集合(set)推导式

  • 将字典key和value互换
dic = {'a':10, 'b':20, 'c':30}
{value: key for key, value in dic.items()} # 返回键值对
# {10: 'a', 20: 'b', 30: 'c'}
  • 提取首字母
words_list = ['apple', 'oppo', 'vivo', 'xiaomi']
set(w[0] for w in words_list)
# {'a', 'o', 'v', 'x'}

集合是无序且不重复的,会自动去掉重复的元素。

三、总结

总的来说,就是把普通的多行 for 循环压缩成一行代码。

这种压缩语法适用于列表、字典、集合等可迭代数据结构。

  • 代码可读性 只需要一行代码
  • 局部作用域 不存在变量泄露问题
  • 尽量保持简洁

参考链接:Python的列表推导式

参考链接:Python中的列表推导式

参考链接:Python列表推导式

posted @   Hider1214  阅读(995)  评论(0编辑  收藏  举报
编辑推荐:
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
历史上的今天:
2018-11-04 Python学习笔记:import sys模块(argv、path、platform、exit)
2018-11-04 Oracle学习笔记:wm_concat函数合并字段
点击右上角即可分享
微信分享提示