【导言】《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)。
未完待续
领取专属 10元无门槛券
私享最新 技术干货