Python3学习(9)--列表生成式(List generation)

来源:互联网 发布:宝信软件 编辑:程序博客网 时间:2024/06/05 06:14

列表生成式:List generation

从字面上,我们可以理解为,列表生成式是通过某种公式来产生一个列表list,当然我们也可以通过简单的初始化来构造我们的list,但是如果我们想要得到的list比较复杂怎么办?这时候我们就要用到列表生成式了;由于基础部分,前面讲的太过详细,本篇讲的时候,就以整体demo+注释的方式来好好说一下,这个列表生成式是怎么样玩的,由它构造的list究竟有多简单粗暴,主要还是灵活,没有做不到,只有你想不到。

本篇的所有代码如下:

#!/usr/bin/env python3# encoding:utf-8#一般生成一个list,可以这样做print('A---------------------list(range(m,n))')L = list(range(1,11))print(L)#生成x*x的,我们可以加个for循环实现print('B---------------------for x in range(m,n)')L = []for x in range(1,11):L.append(x*x)print(L)#生成x*x的list,我们可以这样做print('C---------------------[x*x for x in range(m,n)]')L = [x*x for x in range(1,11)]print(L)#生成x*x的list,我们只要能够被3整除的部分print('D---------------------[x*x for x in range(m,n) if 条件]')L = [x*x for x in range(1,11) if x%3 == 0]print(L)#通过两个变量,利用列表生成式生成一个结构为[x=y]的list,我们可以用字符串进行拼接得到print("E---------------------[x+'='+y for x,y in D.items()]")D = {"Name":"appleyk",'age':26,'sex':'F'}#这里注意:age的value值是一个int类型L = [x+'='+y for x,y in D.items() if not isinstance(y,int)] # 同时访问 dict的key和value,并将key和value组合成新的list元素#上面我们加了条件限制,也就是只要value是int类型的,我们不组合,因为x+'='+y只针对字符串加可以,如果y是int,+号就会成为定时炸弹print(L)#转化list元素为小写print("F---------------------[s.lower() for s in L]")L = [s.lower() for s in ['Hello', 'World', 18, 'Apple',None] if (s is not None and not isinstance(s,int))]#注意,这里我们也加了条件限制,因为int类型和None没有lower属性,且None只能用is来判断,它没有具体的类型!print(L)'''全排列集合:[x+y+z+.... for x in.. for y in .. for z in .. .....]一般使用两层就够了,超过三层以上,就有点太庞大了,自己验证'''print('G---------------------x+y+z+... for x in .. for y in .. for z in .. ......')L = [m+n for m in "ABC" for n in "abc"]print(L)print("H--------输出指定目录下的所有文件:")import os  #  output stream 输出流L = [dir for dir in os.listdir('D:\\')]#listdir函数接收FilePath路径,并返回一个list对象,元素是文件名print(L)

我们看下执行的结果:




通过以上的代码学习,我们知道这种生成式的强大之处,这只是简单的应用,虽然简单,但也足以让人为之惊叹!


结束语: 如果你暂且改变不了世界,那么,请花点时间,先改变自己吧。