当前位置: 首页 > 图灵资讯 > 行业资讯> Python列表推导式(for表达式)及用法

Python列表推导式(for表达式)及用法

发布时间:2025-10-21 21:24:31

for 表达式(列表推导式)用于利用其他范围、元组、列表等可迭代对象创建新列表。

for 表达式语法格式如下:

[表达式for循环计数器in可迭代对象]

从上述语法格式可以看出,for 表达式与普通 for 循环有两个区别:

在 for 在定义表达式之前,关键字通常包含循环计数器。

for 表达式没有循环体,所以不需要冒号。

for 当然,表达式也有循环,它也会循环可迭代对象,可迭代对象包含几个对象,这个循环是对的 for 之前执行过几次“表达式”(相当于 for 以前的表达式是循环体),每次执行的值作为新的列表元素收集。

for 列表最终返回表达式,因此 for 表达式也称为列表推导式。

例如,以下代码(程序1):

a_range=range(10)
#对a_range执行for表达式
a_list=[x*xforxina_range]
#a_list集合包含10个元素
print(a_list)

上面的粗体字代码将是对的 a_range 因为。执行迭代 a_range 相当于包含 10 因此,程序生成的个元素 a_list 同样包含 10 一个元素,每一个元素都是一个元素 a_range 每个元素的平方(由表达式) x*x 控制)。

运行上述代码时,可以看到以下输出结果:

[0,1,4,9,16,25,36,49,64

还可以在 for 添加后面的表达式 if 条件,这样 for 表达式只会迭代符合条件的元素。例如,代码如下:

b_list=[x*xforxina_rangeifx%2==0]
#a_list集合包含5个元素
print(b_list)

第一行代码和程序1 3 行代码大致相同,只是为了 for 增加了表达式 if 这样,程序只处理条件 range 因此,程序生成了范围的偶数 b_list 只包含 5 个元素。

运行上述代码时,可以看到以下输出结果:

[0,4,16,36,64]

如果将 for 表达式方括号改为圆括号,for 表达式将不再生成列表,而是生成生成器(generator),该生成器也可以使用 for 循环选代。

使用圆括号 for 表达式,它最终回到了生成器,所以这个 for 表达式也被称为生成器推导式。例如,代码如下:

#使用for表达式创建生成器
c_generator=(x*xforxina_rangeifx%2==0)
#使用for循环迭代生成器
foriinc_generator:
print(i,end='\t')
print()

程序中,第 2 行代码只是将 for 表达式的方括号改为圆括号,因此该代码将创建一个 generator 对象,下一个程序使用 for 这个循环已经过去了 generator 对象。操作上述程序,得到以下输出结果:

04163664

前面看到的 for 表达式只有一个循环,其实只有一个循环。 for 像嵌套循环一样,表达式可以使用多个循环。例如,代码如下:

d_list=[(x,y)forxinrange(5)foryinrange(4)]
#d_list列表包含20个元素
print(d_list)

上面代码中 x 是遍历 range(5) 所以这是计数器 x 可迭代 5 次;y 是遍历 range(4) 所以这是计数器 y 可迭代 4 次。所以,该(x,y)表达式共会迭代 20 次。

运行上述代码时,可以看到以下输出结果:

(0,0),(0,1),(0,2),(0,3),(1,0),(1,1),(1,2),(1,3),(2,0),(2,1),(2,2),(2,3),(3,0),(3,1),(3,2),(3,3),(4,0),(4,1),(4,2),(4,3)

上面的 for 表达式相当于以下嵌套循环:

dd_list=[]
forxinrange(5):
foryinrange(4):
dd_list.append((x,y))

当然,它也支持类似三层嵌套的支持 for 表达式,如以下代码:

e_list=[[x,y,z]forxinrange(5)foryinrange(4)forzinrange(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
src_b=[3,5,7,11]
#只要y能整除x,就配对在一起
result=[(x,y)forxinsrc_bforyinsrc_aify%x==0]
print(result)

运行上述代码时,可以看到以下输出结果:

(3,30),(3,12),(3,66),(3,39),(3,78),(3,36),(3,57),(5,30),(11,66),(11,121))]

相关文章

Python列表推导式(for表达式)及用法

Python列表推导式(for表达式)及用法

2025-10-21
浅谈Python类命名空间

浅谈Python类命名空间

2025-10-21
Python open函数详解:打开指定文件

Python open函数详解:打开指定文件

2025-10-21
Python readline和readlines函数:按行读取文件

Python readline和readlines函数:按行读取文件

2025-10-20
Python多继承C3算法解析

Python多继承C3算法解析

2025-10-20
python如何将数据渲染到docx文档指定位置

python如何将数据渲染到docx文档指定位置

2025-10-20