开发者学堂课程【高校精品课-华东师范大学 - Python 数据科学基础与实践: python 范儿编程--解析式 中】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/1067/detail/15355
python 范儿编程--解析式 中
内容分析:
一、解析式/推导式
二、使用中括号进行列表解析
一、解析式/推导式
1、语法格式:
仔细研究一下它的语法格式,外面的话一层可以用大括号,中括号小括号。
分别对应着:大括号的话就是字典或者集合,如果是中括号的话,对应的是基本的数据结构列表,小括号的话就对应着基本的数据结构——元组。这一个表达式里面大家看到没有,它分为这样几部分。这是第一部分 exper ( item ) ,它是元素或者对元素的操作。就是包括它的表达式、运算函数都可以,就是在这个元素上面的各种操作。然后第二部分就是 for 后面的一个 for in 结构( for item in )就是遍历行为。这是可迭代的一个遍历行为。这个 item 要注意,它可能是一个也可能是两个多个。第三部分就是筛选条件。就是说如果有条件的话是可以选择的。可选表示可以有也可以没有。 If 后面是一个条件表达式,可以判断这一个 item 都满足什么条件。最后,就是用括号:小括号中括号大括号,把它括起来,然后就可以得到不同数据结构的对象。这就是解析式的语法格式。
2、例子:
①可以把这个解析式直接放在 print 里面,看到中括号表示它结果是一个列表,所以可以把它叫做列表解析式。然后第一部分是对这个元素的操作,元素是 x , X 的平方。然后第二部分应该是遍历和迭代 for...in 。 for x in range 10,就是0~9,然后没有条件,中括号括起来。应该就是求10以内的数的平方。
执行结果如下:②元素是 x ,遍历是 x in dir (str),这个str,是 Python 的一个内置函数,是把那些数字的内容转换成字符串, str 是这个字符串,看字符串它里面的内容,因为在Python里面一切都是对象,所以str这个函数也是一个对象,对象是属性和方法,那么dir就显示这个对象里面所有的属性和方法。
下面显示了一些属性和方法:第三部分是筛选条件。条件的话如果这个属性和方法里面含有下划线的话,那么就不显示,因为它是 if _,不在这个 x 里面,也就不含有下划线的。
这也是一个列表解析式。
二、使用中括号进行列表解析(即列表解析式)
1、 enumerate 函数:是一个枚举类型,是看一个基本的数据结构里面的内容,就是元素以及其缩影位置。基础知识的话,可以看看这份资料里面的第一部分,第二部分,然后了解一下enumerate 的使用。这个函数经常用,是非常重要的,我们的任务是把一个 list 列表里面的一些元素的位置,它的缩影号找出来,然后更新原来的这个 list 。
2、例子:
这里有一个list,然后里面有这样一些名字,然后输出一下,用 enumerate 。然后把这个列表放在里,然后后面,一个是看这个类型,一个是看它里面的元素。那么类型是一个 enumerate class 。它里面的元素是一个对象,没有直接显示内容。那么要显示这个,enumerate 它的内容可以用这样的方法:
因为 enumerate 它是返回两个值,一个是缩影位置,一个是元素,所以 for 后面可以给两个变量,一个是 id x 它的缩影位置,一个是元素,然后 in enumerate上面那个列表,下面用一个格式化输出。格式化输出里面是在刚刚那个列表,然后那个位置,然后它的值是改动了的。用两个占位符一个是0,一个是1。在大括号里面,然后这两个0和1等于占了个位置。用后面这个format后面的这个内容去给它替换掉,然后把它变成一个字符串,所以这是一个字符串格式化的一种方法,可以达到一个好的输出效果。format是等于是这个字符串里面的一个函数,然后里面就是把 id x 放在0的位置, enumerate 放在1的位置,然后再输出一下。
上面列表赋值要先运行一下,这个列表给改变了,变成了就是每一个内容的话是一个缩影,位置,然后m后面跟着他一个元素值,这样一个操作的话通过上面这串代码可以实现。
如果用刚刚学到列表解析式来实现的话,定义一个列表跟刚刚那个是基本上是一样的内容,然后自定义函数,这个函数里面传回两个值,一个是缩影位置一个是元素,然后返回一个格式化的一个字符串,然后下面再输出一下,输出的时候调这个函数,然后传两个值。然后这两个是在哪里面呢?是 for 一个迭代。然后是在这个 enumerate 这个 test 里面,然后中括号里面是表示是列表解析式。列表解析式里面第一部分就是元素或者元素的操作,可以用函数操作它,第二部分是一个遍历和迭代 for in ,然后这个后面是没有条件的。然后看一下这个结果 print 的时候也用了一个format的一个格式化输出,这个print是没有用上面的函数,直接就是用这个列表解析式来做的,上面呢,做了一个函数的,有两个print。
执行后结果相同:
有了这个列表解析式,对 Python 的一些数据进行处理的话,就很方便了,功能很强大。
3、可迭代的对象 Iterable (里面的元素可以遍历)及数据类型检查(在上面用了一个type观察变量的类型,建议用 isinstance 方法检查类型更好。)
⑴先导入一个包collection,它是个集合,观察它是不是可迭代,所以用 isintance Hello world,这是一个字符串,字符串是一个元组,是可以迭代的,判断他是不是集合里面一个可迭代的对象。那如果是的话它就处,那么下面的test呢是一个列表,那么也要判断它是不是可迭代的一个对象,那么它也是的,所以这个技巧要了解。
⑵练习:
①
用列表形式,前面字符串里的每个元素和后面字符串的每一个元素合并。中间加一个减号,所以应该是第一个字符串选择元素是 a ,然后字符串的合并是加号,加一个中间连字符减号,再加 b 然后 for 后面遍历。
来看一下这个代码: a + 然后加这个连字符号,再加 b for , for a 和 b 是后面的这个元素,要在里面进行遍历 for a in ABC 里面,然后在 for b in DEF 。所以这种习惯要有。
这个基础知识要给大家补一下,对基础知识加深一下。
它的结果:结果就是。第一个字符串里面的每个元素和第二个里面的每个元素,然后把它连接起来,用减号连起来。
②
把这个中间的符号减号变成冒号:
结果是冒号连接的:
③下面一个是 a:b ,然后 for a in abc for b in DEF ,是用大括号跟上面的大括号一样的,上面大括号表示字典,字典里面一个是 key 。应该这里是拼在一起的,这个不是 key value 。Key 应该是A'。冒号后面对应引号引起来的。现在a冒号对应在一起的,然后在引号里面它等于是一个元素。所以这是一个集合。一个set它不是一个字典。
④这里去构造一个字典: a:b 然后 for 循环。
结果是:
得到的结果是字典,一个 key 一个 value 。但是这个 key 、 value 它最终的结果是只有三个结果。
没有 A : D , A : E , A : F ,它最后只选一个f的元素。
最后大家要思考下这个结果的原因。
















