0基础学Python之十三:列表(下)

Hi 大家好,我是王可乐,今天我们继续来聊列表相关的话题。为什么我们要聊那么多期的列表话题呢?这是因为,列表这个数据类型真的是太重要了,值得我们多花一点时间来理解和实践。

好的,我们开始吧。首先,我们先来设想一个场景,假设我是一个中学的数学老师,刚刚进行了一次数学考试,我想知道这次考试的最高分,最低分,平均分。我应该怎么用Python来解决这个问题呢?相信认真看过我们之前节目,并且有过思考和实践的朋友们,应该很快能想到怎么做。

刚刚学习过列表,首先我们想到可以把同学们的成绩都放到一个列表中。在这段代码里,我们用 scores 这个数组存放成绩。然后,我们利用循环语句遍历一遍这个列表,把最大值,最小值记下来,并且把总分数加起来就行了。注意看一下,我们定义的三个变量:min_score 保存最小值;max_score 保存最大值;sum_score 记录总分数,他们定义的时候分别被赋予了不同的值。

为什么这三个变量的初始值要这样来设置呢?请各位同学自己思考一下原因。

对于统计成绩这个场景,以上的实现方式非常直接。不过,Python 还有更加简洁的方式来处理这个需求。我们可以直接使用 max(),min(),sum()这三个 Python 的内置函数来得到一个列表中的最大值,最小值,以及所有数字的和,所以上面的代码可以直接简化成这样:

怎么样,是不是简洁多了?不过虽然第一段代码比第二段代码长,但第二段代码的执行效率实际上是没有第一段代码那么高的。具体原因与 max,min 以及 sum 这三个函数的实现机制有关,可乐将在后续算法相关的课程中给大家解释。

在这里可乐想给大家解释的一点是,写程序实际上也是一个找平衡的过程。什么意思呢?如,复杂的代码可能运行效率高,但不如简单的代码好理解、易于维护;有的程序占用内存多,但是运行速度快,而占用内存少的方案,运行速度就慢,等等。这些纠结和取舍也是编程有意思的一方面。可乐建议初学编程的朋友,优先考虑保持代码的简洁易读性。以大家目前使用的家用电脑的运算能力,处理的一些日常的工作,性能是足够的。

讲到这里,可能又有头脑灵活的朋友会问,列表不是可以包含多种数据类型嘛?上面的例子里,数组里只有整数,如果数组里还有字符串,那么使用内置 max,min,sum 这三个内置函数会有什么结果呢?我们来试一下:

可以看到,Python 在这里并没有给我们带来什么惊喜,而是提示有错误。我们看报错的信息,它说 ">" 号不支持字符串和整数之间的比较,说明 max 函数在内部使用了 ">" 号操作符来比较元素的大小。这是一个符合大家直觉的结果。

不过,我们还是可以做一些事情,让 “>” 号支持不同类型数据之前的比较。具体的实现方法就留在可乐的高级课程中讲解了。目前我们只要保证列表中的数据,数据类型相同就可以了。

知道了最高分,最低分,平均分之后,可乐老师还有一个新需求,就是对班级里的学生们的成绩进行排名。排序在很多场景里是非常常见的需求。那么,列表中的数字们怎么排序呢?

在 Python 中,列表支持一个方便的函数 sort,只要调用一下 sort 函数,列表中的数字就会按照从小到大的顺序排列好了。我们来试一下,可乐把前面代码中的 scores 列表复制到了 Python Shell 里:

是不是很方便?如果你想从大到小排序,也很简单,只要换用列表的另一个内置函数 reverse 就可以了:

接下来,可乐老师又提了一个需求,我还想知道哪些同学没考及格,要对他们进行重点辅导。这个需求应该怎么来实现呢?大家可以先暂停视频,自己试试看,然后再来看答案。

好,下面可乐老师来给出一个解决方案。利用一个循环来遍历所有的分数,然后找出低于 60 分的即可,代码如下:

这个程序的功能比较简单,可乐就不多解释了,不过虽然功能很简单,但还是需要好几行代码。那么有没有更加方便的实现方式呢?

可乐下面要介绍的这个技巧叫做列表推导式。使用这个技巧,可以很方便地通过简单操作生成新的列表。下面可乐就来给大家演示一下:

怎么样,同样的逻辑居然只用了一行代码就完成了,我们来看看关键的这行代码。

首先,等号右边的部分代码是用中括号括起来的,就是表示列表的符号;中括号里面的内容,它的含义是“对于 socres 列表里的每一个 i,只要满足 i

事实上,for 前面的 i 可以是一个灵活的表达式,我们还可以对 i 做更多的操作,例如:

这里没有了前面代码 if 的部分,也就是说对于 x 列表中的每一个元素 i,都会产生一个 i*i 在新的列表中。列表推导式又是一个能够极大简化代码的技巧,可乐建议大家在看了本期节目后,多多实践,更好地掌握这个技巧。

今天的最后一个知识点,可乐要讲一下字符串和列表的相互转化。在之前讲字符串的时候,可乐为大家演示过如何使用 join 函数从列表生成字符串,前提是列表中的元素都是字符串。今天可乐再来给大家介绍一下 join 函数,以及另一个 split 函数。我们还是用实例来演示一下:

以上用 split 处理字符串,以及用 join 把列表组合成字符串的操作非常常见。大家要多多练习哦。

好了,今天的课程就到这里。今天我们讲到了更多的列表的特性和操作技巧。并且利用列表帮助可乐老师统计了学生的成绩。你是不是已经想到了很多列表在自己工作环境里的应用场景了呢?

不过,列表只是 Python 中有用的数据类型之一,下节课我们将为大家介绍另一个有趣的数据类型。记得关注我们的公众号“可乐编程”哦,如果你觉得课程内容比较有趣,请转发给你的朋友们,可乐感谢大家的支持,我们下次课再见!

往期课程:

《0基础学Python之十二:列表(中)》

《0基础学Python之十一:列表(上)》

《0基础学Python之十:函数初探》

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180414G0U4BO00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券