Python•CHAPTER FIVE

【导言】《Python Tutorial, Release 3.6.4》是适合Python3.6.4语言版本的教程,该教程英文原版来自Python官网,内容权威,版本最新,注重基础,示例代码准确无误,学习高效快捷,非常适合Python编程初学者入门。

该教程英文原版版权属于Python官网 https://www.python.org/ 所有,从英文原版译出的中文版权归译者华哥所有。

该教程发布形式:前部分为中文译文,后部分为对应的英文原文。中文译文中主要示例直接用Python3.6.4解释器演示。

该教程英文原版包括16章和附录共150多页,将分期连续发布,敬请期待!

该教程《第五章 数据结构》的译文分成三部分,将分三次连续发布,这是第一部分(1 / 3)。

查阅相应的英文部分,请到Python官网 https://www.python.org/下载Python Tutorial, Release 3.6.4文档。

第五章 数据结构

本章将更多细节地描述某些你已经了解了的内容,同时,也增加一些新的内容。

5.1 关于列表的更多内容

列表数据类型有更多的方法。

下面是列表对象的所有方法:

list.append(x)

增加一项到列表(list)的末尾,相当于a[len(a):] = [x]。

list.extend(iterable)

通过添加来自迭代器的所有项来扩展列表。相当于a[len(a):] = iterable。

list.insert(i, x)

在给出的某个位置上插入一项。第一个参数i是插入位置之前的元素索引。因此,a.insert(0, x) 在该列表的前部插入,而a.insert(len(a), x) 则相当于a.append(x)。

list.remove(x)

从列表中移除x的值。如果没有这一项,则会抛出一个错误。

list.pop([i ])

移除给出位置的列表中的这一项,并返回它。如果没有指定索引,a.pop()移除并返回列表最后一项。(在方法标识中包围i的方括号,意味着参数是可选的,而不是你必须在那个位置键入方括号。在Python Library Reference中,你将频繁看到这种标记法。)

list.clear()

从列表中移除所有项。相当于del a[:]。

list.index(x[,start[, end ]])

返回列表中第一项x的值是基于零的索引,如果没有这项,将挂起一个值错误(ValueError)。

可选参数"start"和"end"是被作为切片标记解释的,并被用于限制列表中特定子序列的搜索。返回的索引的计算与整个序列的开始有关,而不是与“start”参数有关。

list.count(x)

返回x在列表中出现的次数的数字。

list.sort(key=None,reverse=False)

在适当的位置对列表中的项进行排序( 参数可用于排序定制,请参见关于 sorted() 的说明)。

list.reverse()

在适当位置颠倒列表中元素的顺序。

list.copy()

返回列表的一个浅拷贝,相当于a[:]。

一个使用列表中大部分方法的例子:

你也许已经注意到像insert、remove和sort这些方法,仅仅是修改列表,而没有返回值打印——它们返回默认值None。这是对于Python中所有可变数据结构的一种设计原则。

5.1.1 把列表作为堆栈使用

列表方法使得把列表作为栈来使用非常容易。在最后一个元素添加的地方是被检索的第一个元素 (“last-in, first-out”)。添加一项到堆栈的顶部,使用append()函数,从堆栈顶部检索一项,使用pop()函数,无须显式索引。例如:

5.1.2 把列表作为队列使用

也可以把列表作为队列使用,在第一个元素添加的地方是被检索的第一个元素(“first-in,first-out”)。然而,列表对此不是有效的。当从列表末端执行append()和pop()是快速的,而当从列表顶端执行

insert()或pop()是缓慢的(因为所有其它的元素不得不通过1进行转换)。执行一个队列,可以使用

collections.deque,它被设计成具有从两端快速添加和弹出的能力。例如:

5.1.3 递推式构造列表(列表推导)

列表推导提供了一种创建列表的简洁方法。一般应用程序产生新的列表,每一个元素是一些操作的结果另一个序列或迭代器的每一个成员,或者创建一个满足某一条件的由这些元素组成的子序列。例如,我们想创建一个乘方的列表,像:

注意这创建(或重载)一个在循环结束后仍然存在的名为X的变量。我们可以使用squares = list(map(lambda x: x**2, range(10)))在没有任何副作用的情况下来计算平方,或者,相等地squares = [x**2 for x in range(10)],这样更加简洁、可读。一个递推式构造列表由包含一个表达式、后跟一个for语句的括号,然后零或更多的for或if语句组成。结果是一个新的list,它产生于表达式求值,在跟随它的for和if语句的上下文中。例如,listcomp合成两个list元素,如果它们不相等的话:

并且,它也相当于:

注意for和if语句怎么排序,在这些片段之间是一样的。如果表达式是一个元组(例如前面的例子(x,y)),它必须加上圆括号。

递推式构造列表可以包含混合表达式和内嵌函数。

5.1.4 内嵌递推式构造列表

在内嵌递推式构造列表中的初始表达式,可以是任何任意的表达式,包含另一个递推式构造列表。

考虑下面的3x4矩阵示例,该矩阵由3个长度为4的列表实现:

以下递推式构造列表将转换行和列:

正如我们在上一节中所看到的,嵌套的listcomp是在后面的for上下文中计算的,因此这个示例相当于:

相应地,也是一样的:

在现实世界中,与复杂的流语句相比,您应该更喜欢内置函数。zip()函数将为这个用例做很好工作:

有关这一行星号的详细信息,请参阅解压参数列表(Unpacking Argument Lists)。

未完待续

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

同媒体快讯

扫码关注腾讯云开发者

领取腾讯云代金券