当前位置:   article > 正文

《0基础》学会Python——第八讲_列表推导式

《0基础》学会Python——第八讲_列表推导式

第八讲

一、列表生成式

        列表生成式即List Comprehensions,是一种Python内置,非常简单却强大,可以通过表达式推导来生成一个list列表的方式,又名列表推导式

        例如,要生成list [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]可以用list(range(1, 11)):,

        但是如果想生成[1 * 1, 2 * 2, 3 * 3, ..., 10 * 10]呢

方法一:通过循环

  1. lt=[]
  2. a=[]
  3. for i in range(1,11):
  4. lt.append(f'{i}*{i}={i*i}')
  5. print(lt)

其输出结果为:

c6fe73404b6043adab5974b95da4e168.png

 

方法二:使用列表推导式,一行代码即可代替循环生成上面的list:

即可以将上部分代码简化一下,把要生成的元素x * x放到前面 后面跟for循环,就可以把list创建出来,如下所示

简化前:  

  1. lt=[]
  2. a=[]
  3. for i in range(1,11):
  4. lt.append(f'{i}*{i}={i*i}')
  5. print(lt)

简化后:

  1. lt=[f'{i}*{i}={i*i}' for i in range(1,11)]
  2. print(lt)

其结果和上部分一样,即创建一个空列表,列表内的需要的内容放在最前面,后面跟上for循环语句。

其中for循环后面还可以加上if判断,例如仅将一定范围内的偶数筛选出来:

  1. lt=[]
  2. for i in range(1,11):
  3. if i%2==0:
  4. lt.append(i)
  5. print(lt)

通过列表生成式:

  1. lt=[i for i in range(1,11) if i%2==0]
  2. print(lt)

输出结果都为:

8f1070132a954d3c819c677d221a6486.png

 

也使用两层循环,例如生成ABC和XYZ中全部字母的排列组合:

优化前:

  1. lt=[]
  2. for a in "ABCDEF":
  3. for b in "abcdef":
  4. lt.append(a+b) #字符串相加即为合并
  5. print(lt)

优化后:即将内层循环同样往后增加

  1. lt=[a+b for a in "ABCDEF" for b in "abcdef"]
  2. print(lt)

 

二、例题:利用循环表示出杨辉三角

        杨辉三角示例图如下:(先思考思路,再自己敲,然后再来看解释)

f3a1aec506b44e8a9374c54a8c6c2a85.png9f6a4a20bb864149aba0b366fe8b624e.png

 

首先找规律,例如可以写出第三层求第四层代码,代码如下

  1. l3=[1,2,1]
  2. l4=[]
  3. for i in range(len(l3)-1):
  4. l4.append(l3[i]+l3[i+1])
  5. l4=[1]+l4+[1]
  6. print(l4)

其运行结果为 :  3a45a00118e94f20be5e60fb171408aa.png

同样我们也可以求第四层到第五层的代码:

  1. l3=[1,2,1]
  2. l4=[]
  3. for i in range(len(l3)-1):
  4. l4.append(l3[i]+l3[i+1])
  5. l4=[1]+l4+[1]
  6. print(l4)
  7. l5=[]
  8. for i in range(len(l4)-1):
  9. l5.append(l4[i]+l4[i+1])
  10. l5=[1]+l5+[1]
  11. print(l5)

e41a4df0eb2d4825b070b972cf81ab35.png

往下推可以,那么我们往上推,从第二轮推到第三轮

  1. l2=[1,1]
  2. l3=[]
  3. for i in range(len(l2)-1):
  4. l3.append(l2[i]+l2[i+1])
  5. l3=[1]+l3+[1]
  6. print(l3)

da75fc42a3d8494ba2ea2fe002137557.png

我们再推第一轮到第二轮

  1. l1=[1]
  2. l2=[]
  3. for i in range(len(l1)-1):
  4. l2.append(l1[i]+l1[i+1])
  5. l2=[1]+l2+[1]
  6. print(l2)

c65032ac8c3047cd9916be34820aecf2.png

至此我们已经单独求完杨辉三角绝大多数思路部分内容,那么接下来该想一想如何完整的打印出来,

 

  1. last_list=[1]
  2. print(last_list)
  3. for j in range(10):
  4. next_list=[]
  5. for i in range(len(last_list)-1):
  6. next_list.append(last_list[i]+last_list[i+1])
  7. next_list=[1]+next_list+[1]
  8. last_list=next_list
  9. print(last_list)

其中内层for循环可以写成列表生成式:

  1. last_list=[] #初始化上一层
  2. print(last_list)
  3. for j in range(10): #自定义循环10次,即打印10层
  4. next_list=[last_list[i]+last_list[i+1] for i in range(len(last_list)-1)]
  5. next_list=[1]+next_list+[1]
  6. last_list=next_list
  7. print(last_list)

 

 

 

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小惠珠哦/article/detail/869686
推荐阅读
相关标签
  

闽ICP备14008679号