列表推导式python菜鸟教程,Python列表推导式,并解释它的作用_4

  列表推导式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=[]

  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,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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: