列表推导式python菜鸟教程,Python列表推导式,并解释它的作用
For expression(列表派生)用于使用其他迭代对象(如区间、元组和列表)创建新列表。
for表达式的语法格式如下:
【iterable对象中循环计数器的表达式】从上面的语法格式可以看出,for表达式和普通for循环有两个区别:
在for关键字之前定义一个表达式,它通常包含一个循环计数器。
for表达式没有循环体,所以不需要冒号。
当然,for的表达式有一个循环。它还循环iterable对象,该对象包含几个对象。该循环多次执行“表达式”before(相当于作为循环体的表达式before),并将每次执行的值收集为一个新的列表元素。
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,81]还可以在for表达式后添加一个if条件,这样for表达式只会迭代那些满足条件的元素。例如,下面的代码:
b _ list=[x * xforxina _ rangeifx % 2==0]
#a_list集合包含5个元素。
print中的第一行代码(b_list)与程序一中的第三行代码大致相同,只是在for表达式中增加了if条件,这样程序只处理范围区间内的偶数,所以程序生成的b_list只包含五个元素。
运行上面的代码,您可以看到以下输出结果:
[0,4,16,36,64]如果将for表达式的方括号改为圆括号,那么for表达式将不再生成列表,而是生成一个生成器,也可以使用for循环选择代。
对于使用括号的For表达式,最终返回生成器,所以这个for表达式也叫生成器派生。例如,下面的代码:
#使用for表达式创建生成器
c _ generator=(x * xforxina _ rangeifx % 2==0)
#使用for循环迭代生成器
foriinc_generator:
print(i,end=\t )
在print()程序中,第二行代码只是把for表达式的方括号改成了圆括号,所以这一行代码会创建一个生成器对象,然后程序会使用for循环遍历生成器对象。运行上述程序以获得以下输出结果:
0163664前面看到的所有for表达式都只有一个循环。事实上,for表达式可以使用多个循环,就像嵌套循环一样。例如,下面的代码:
html;toolbar:false">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=[]当然,也支持类似于三层嵌套的 for 表达式,例如如下代码:forxinrange(5):
foryinrange(4):
dd_list.append((x,y))
e_list=[[x,y,z]forxinrange(5)foryinrange(4)forzinrange(6)]对于包含多个循环的 for 表达式,同样可指定 if 条件。假如我们有一个需求:程序要将两个列表中的数值按“能否整除”的关系配对在一起。比如 src_a 列表中包含 30,src_b 列表中包含 5,其中 30 可以整除 5,那么就将 30 和 5 配对在一起。对于上面的需求使用 for 表达式来实现非常简单,例如如下代码:#e_list列表包含120个元素
print(e_list)
src_a=[30,12,66,34,39,78,36,57,121]运行上面代码,可以看到如下输出结果: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)]
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。