零基础入门学习Python(第2版)
上QQ阅读APP看书,第一时间看更新

5.4 序列

视频讲解

聪明的你可能已经发现,小甲鱼把列表、元组和字符串放在一块儿来讲解是有道理的,因为它们之间有很多共同点:

• 都可以通过索引得到每一个元素。

• 默认索引值总是从0开始(当然灵活的Python还支持负数索引)。

• 可以通过切片的方法得到一个范围内的元素的集合。

• 有很多共同的操作符(重复操作符、拼接操作符、成员关系操作符)。

我们把它们统称为:序列!下面介绍一些关于序列的常用BIF(内建方法)。

1. list([iterable])

list()方法用于把一个可迭代对象转换为列表,很多读者可能经常听到“迭代”这个词,但要是让你解释的时候,却又可能会含糊其词了:迭代……迭代不就是for循环嘛……

这里小甲鱼帮大家科普一下:所谓迭代,是重复反馈过程的活动,其目的通常是为了接近并达到所需的目标或结果。每一次对过程的重复被称为一次“迭代”,而每一次迭代得到的结果会被用来作为下一次迭代的初始值……就目前来说,迭代还真的就是一个for循环,但今后会介绍到迭代器,那个功能,才叫惊艳!

好了,这里说list()方法要么不带参数,要么带一个可迭代对象作为参数,而这个序列天生就是可迭代对象(迭代这个概念实际上就是从序列中泛化而来的)。

下面仍然通过几个例子给大家讲解一下:

     >>> # 创建一个空列表
     >>> a = list()
     >>> a
     []
     >>> # 将字符串的每个字符迭代存放到列表中
     >>> b = list("FishC")
     >>> b
     ['F', 'i', 's', 'h', 'C']
     >>> # 将元组中的每个元素迭代存放到列表中
     >>> c = list((1, 1, 2, 3, 5, 8, 13))
     >>> c
     [1, 1, 2, 3, 5, 8, 13]

事实上这个list()方法大家自己也可以动手实现,对不对?很简单嘛,实现过程大概就是新建一个列表,然后循环通过索引迭代参数的每一个元素并加入列表,迭代完毕后返回列表即可。大家不妨自己动手来尝试一下。

2. tuple([iterable])

tuple()方法用于把一个可迭代对象转换为元组,具体的用法和list()一样,这里就不再赘述了。

3. str(obj)

str()方法用于把obj对象转换为字符串,这个方法3.9.4节中讲过,还记得吧?

4. len(sub)

len()方法前面已经使用过几次了,该方法用于返回sub参数的长度:

     >>> str1 = "I love fishc.com"
     >>> len(str1)
     16
     >>> list1 = [1, 1, 2, 3, 5, 8, 13]
     >>> len(list1)
     7
     >>> tuple1 = "这", "是", "一", "个", "元祖"
     >>> len(tuple1)
     5
5. max()

max()方法用于返回序列或者参数集合中的最大值,也就是说,max()的参数可以是一个序列,返回值是该序列中的最大值;也可以是多个参数,那么,max()将返回这些参数中最大的一个:

     >>> list1 = [1, 18, 13, 0, -98, 34, 54, 76, 32]
     >>> max(list1)
     76
     >>> str1 = "I love fishc.com"
     >>> max(str1)
     'v'
     >>> max(5, 8, 1, 13, 5, 29, 10, 7)
     29
6. min()

min()方法跟max()用法一样,但效果相反:返回序列或者参数集合中的最小值。这里需要注意的是,使用max()方法和min()方法都要保证序列或者参数的数据类型统一,否则会出错:

俗话说:外行看热闹,内行看门道。

不妨分析一下这个报错信息“TypeError: '<' not supported between instances of 'str' and'int'”,意思是说不能拿字符串和整型进行比较。这说明了什么呢?说明max()方法和min()方法的内部实现事实上类似于之前提到的,通过索引得到每一个元素,然后将各个元素进行对比。

所以,根据上述猜想,可以写出类似的实现代码:

由此可见,Python的内置方法其实也没什么了不起的,仔细思考一下也是可以独立实现的嘛。所以,只要认真地跟着本书的内容学习下去,很多看似“如狼似虎”的问题,将来都能迎刃而解!

7. sum(iterable[, start])

sum()方法用于返回序列iterable的所有元素值的总和,用法跟max()和min()一样。但sum()方法有一个可选参数(start),如果设置该参数,表示从该值开始加起,默认值是0:

     >>> tuple1 = 1, 2, 3, 4, 5
     >>> sum(tuple1)
     15
     >>> sum(tuple1, 10)
     25
8. sorted(iterable, key=None, reverse=False)

sorted()方法用于返回一个排序的列表,大家还记得列表的内建方法sort()吗?它们的实现效果一致,但列表的内建方法sort()是实现列表原地排序;而sorted()是返回一个排序后的新列表。

9. reversed(sequence)

reversed()方法用于返回逆向迭代序列的值。同样的道理,实现效果跟列表的内建方法reverse()一致。区别是:列表的内建方法是原地翻转,而reversed()是返回一个翻转后的迭代器对象。你没看错,它不是返回一个列表,而是返回一个迭代器对象。

10. enumerate(iterable)

enumerate()方法生成由二元组(二元组就是元素数量为2的元组)构成的一个迭代对象,每个二元组由可迭代参数的索引号及其对应的元素组成,举个例子:

11. zip(iter1 [,iter2 [...]])

zip()方法用于返回由各个可迭代参数共同组成的元组,举个例子: