列表推导式
1、最简单的
[表达式 for 变量 in 列表] [out_exp_res for out_exp in input_list]
【结果(循环)条件】
>>> names = ['Bob','Tom','alice','Jerry','Wendy','Smith'] >>> new_names = [name.upper()for name in names if len(name)>3] >>> print(new_names) ['ALICE', 'JERRY', 'WENDY', 'SMITH']
或者 [表达式 for 变量 in 列表 if 条件] [out_exp_res for out_exp in input_list if condition]
【结果(循环)条件+if条件】
[表达式 for 迭代变量 in 可迭代对象 [if 条件表达式] ]:
此格式中,[if 条件表达式]
不是必须的,可以使用,也可以省略。
通过列表推导式的语法格式,明显会感觉到它和 for 循环存在某些关联。
其实,除去 [if 条件表达式]
部分,其余各部分的含义以及执行顺序和 for 循环是完全一样的(表达式其实就是 for 循环中的循环体),即它的执行顺序如下所示:
- out_exp_res:列表生成元素表达式,可以是有返回值的函数。
- for out_exp in input_list:迭代 input_list 将 out_exp 传入到 out_exp_res 表达式中。
- if condition:条件语句,可以过滤列表中不符合条件的值。
>>> multiples = [i for i in range(30) if i % 3 == 0] >>> print(multiples) [0, 3, 6, 9, 12, 15, 18, 21, 24, 27]
2、带多个循环
另外,以上所看到的列表推导式都只有一个循环,实际上它可使用多个循环,就像嵌套循环一样。例如如下代码:
d_list = [(x, y) for x in range(5) for y in range(4)]
# d_list列表包含20个元素
print(d_list)
上面代码中,x 是遍历 range(5) 的迭代变量(计数器),因此该 x 可迭代 5 次;y 是遍历 range(4) 的计数器,因此该 y 可迭代 4 次。因此,该(x,y)表达式一共会迭代 20 次。上面的 for 表达式相当于如下嵌套循环:
dd_list = []
for x in range(5):
for y in range(4):
dd_list.append((x, y))
输出结果:
[(0, 0), (0, 1), (0, 2), (0, 3), (1, 0), (1, 1), (1, 2), (1, 3), (2, 0), (2
————————————————
版权声明:本文为CSDN博主「一个写湿的程序猿」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_32727095/article/details/118959610
当然,也支持类似于三层嵌套的 for 表达式,例如如下代码:
e_list = [[x, y, z] for x in range(5) for y in range(4) for z in range(6)]
# e_list列表包含120个元素
print(e_list)
对于包含多个循环的 for 表达式,同样可指定 if 条件。
假如我们有一个需求:
程序要将两个列表中的数值按“能否整除”的关系配对在一起。
比如 src_a 列表中包含 30,src_b 列表中包含 5,其中 30 可以整除 5,那么就将 30 和 5 配对在一起。对于上面的需求使用 for 表达式来实现非常简单,例如如下代码:
src_a = [30, 12, 66, 34, 39, 78, 36, 57, 121]
src_b = [3, 5, 7, 11]
# 只要x能整除y,就将它们配对在一起
result = [(x, y) for x in src_a for y in src_b if x % y == 0]
print(result)
输出结果:
[(30, 3), (30, 5), (12, 3), (66, 3), (66, 11), (39, 3), (78, 3), (36, 3),
————————————————
版权声明:本文为CSDN博主「一个写湿的程序猿」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_32727095/article/details/118959610
3、带if和else
[exp1 if condition else exp2 for x in data]
此处if...else主要起赋值作用,当data中的数据满足if条件时将其做exp1处理,否则按照exp2处理,最后统一生成为一个 数据列表
a=['零' if i==0 else '三' if i==3 else '五' if i==5 else i for i in range(20) ] print(a)
将0,3,5换成中文的零,三,五,输出如下所示:
4、列表去重放入新列表
这两天遇到这个一个问题,因为一个列表嵌套字典,当时字典数据通过循环加入,发现update后覆盖了原数据,于是改成列表,但是却发现本该有4组数据的却成了6组数据,于是要进行去重操作
但是写列表推导式的时候,尝试好几次都未能得出正确结果,,最终在交流群里别人给出了意见,得到了写法
示例:data_list = [{"name": "小蓝", "age": "18"}, {"name": "小红", "age": "18"}, {"name": "小蓝", "age": "18"}]
要进行去重
最终写成
[list1.append(i) for i in data_list if i not in list1] # 这个可以
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 上周热点回顾(3.3-3.9)
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」