知行编程网知行编程网  2022-10-10 02:30 知行编程网 隐藏边栏  15 
文章评分 0 次,平均分 0.0
导语: 本文主要介绍了关于Python列表推导式(for表达式)及用法的相关知识,包括mvel表达式,以及交变电流表达式推导这些编程知识,希望对大家有参考作用。

Python 列表推导(用于表达式)和用法

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

for 表达式的语法格式如下:

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

从上面的语法格式可以看出,for表达式和普通for循环的区别如下:

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

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

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

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

例如如下代码(程序一):

a_range = range(10)
# 对a_range执行for表达式
a_list = [x * x for x in a_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, 81]

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

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

第一行代码与程序1中的第三行代码大致相同,只是在for表达式中增加了一个if条件,使得程序只处理范围内的偶数,所以程序生成的b_list仅包含 5 个元素。

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

[0 ,4 , 16, 36, 64]

如果将 for 表达式的方括号更改为圆括号,则 for 表达式不再生成列表,而是生成器,也可以使用 for 循环选择生成器。

对于带括号的 for 表达式,它最终会返回一个生成器,因此这个 for 表达式也称为生成器推导。例如下面的代码:

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

在程序中,第二行代码只是把for表达式的方括号改成了圆括号,所以这行代码会创建一个生成器对象,然后程序使用for循环遍历生成器对象。运行上面的程序,得到如下输出:

0 4 16 36 64

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

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 次。

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

[(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 = []
for x in range(5):
    for y in range(4):
        dd_list.append((x, y))

当然,也支持类似于三层嵌套的 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)

对于包含多个循环的表达式,还可以指定 if 条件。假设我们有一个需求:程序要把两个列表中的值按照“可除性”的关系进行配对。例如,src_a 列表包含 30,src_b 列表包含 5,其中 30 可以被 5 整除,则 30 和 5 配对在一起。对于上述需求的表达式,使用起来非常简单,比如下面的代码:

src_a = [30, 12, 66, 34, 39, 78, 36, 57, 121]
src_b = [3, 5, 7, 11]
# 只要y能整除x,就将它们配对在一起
result = [(x, y) for x in src_b for y in src_a if y % x == 0]
print(result)

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

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

本文为原创文章,版权归所有,欢迎分享本文,转载请保留出处!

知行编程网
知行编程网 关注:1    粉丝:1
这个人很懒,什么都没写
扫一扫二维码分享