《Python数据科学指南》——1.6 写一个列表

    xiaoxiao2024-05-20  112

    本节书摘来自异步社区《Python数据科学指南》一书中的第1章,第1.6节,作者[印度] Gopi Subramanian ,方延风 刘丹 译,更多章节内容可以访问云栖社区“异步社区”公众号查看。

    1.6 写一个列表

    列表是一种顺序型的容器对象,它和元组很相似,不过,它们是同构且是可变的。列表支持追加操作,它可以被用来当作栈或者队列。与元组不同,它可以扩展,你可以在创建一个列表之后使用append函数给它追加一个元素。

    1.6.1 准备工作

    和介绍元组的小节相似,我们通过一些小段的代码来聚焦于列表的创建与维护操作,而不是像介绍字典那样采用完整的功能代码。

    1.6.2 操作方法

    下面的Python代码演示列表的创建和维护等操作。

    # 1.快速地创建一个列表 a = range(1,10) print a b = ["a","b","c"] print b # 2.列表可以通过索引来访问,索引起始于0 print a[0] # 3.用负数作为索引,则对列表元素的访问从反方向开始 a[-1] # 4.使用两个索引参数,切片操作可以访问列表的子集 print a[1:3] # prints [2, 3] print a[1:] # prints [2, 3, 4, 5, 6, 7, 8, 9] print a[-1:] # prints [9] print a[:-1] # prints [1, 2, 3, 4, 5, 6, 7, 8] # 5.列表串联 a = [1,2] b = [3,4] print a + b # prints [1, 2, 3, 4] # 6.列表的最小值和最大值 print min(a),max(a) # 7.包含于和非包含于 if 1 in a: print "Element 1 is available in list a" else: print "Element 1 is available in tuple a" # 8.追加和扩展列表 a = range(1,10) print a a.append(10) print a # 9.列表实现栈 a_stack = [] a_stack.append(1) a_stack.append(2) a_stack.append(3) print a_stack.pop() print a_stack.pop() print a_stack.pop() # 10.列表实现队列 a_queue = [] a_queue.append(1) a_queue.append(2) a_queue.append(3) print a_queue.pop(0) print a_queue.pop(0) print a_queue.pop(0) # 11.列表排序和反转 from random import shuffle a = range(1,20) shuffle(a) print a a.sort() print a a.reverse() print a

    1.6.3 工作原理

    第1步中,我们能看到创建列表的方式与其他的不同,请注意我们只有同类型的元素。和集合不一样,列表允许存在重复的元素。第2步到第7步和元组的相关步骤都是一样的,覆盖了索引、切片、串联、最小最大值、包含于和非包含于等操作,我们不再赘述。

    第8步演示了追加和扩展操作,这也是列表区别于元组的地方(当然,请注意列表元素必须是同类型)。我们来看看代码第1部分的输出。

    >>> a = range(1,10) >>> print a [1, 2, 3, 4, 5, 6, 7, 8, 9] >>> a.append(10) >>> print a [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] >>>

    我们看到10被添加到列表a中。

    下面的输出是第2部分中扩展函数的演示。

    >>> b=range(11,15) >>> a.extend(b) >>> print a [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14] >>>

    我们用另一个列表b扩展了原来的列表。

    在第9步中,我们演示了用列表实现栈的功能,pop()函数用来取回追加到列表中的最后一个元素,输出结果如下。

    3 2 1

    最后一个被追加进来的元素被第一个取回,这就是栈的后进先出(Last In First Out,LIFO)。

    在第10步,我们用列表来实现队列,pop()函数用0作为参数,表明要取出的元素的索引已经被传递了,输出结果如下。

    1 2 3

    输出结果遵循的是队列的FIFO类型,但这是一种低效的方法。由于列表底层实现的方法限制,弹出最初的元素不是一个好的选择。如果想要执行这个操作,一个更有效的方法是使用双端队列数据结构,我们将在下一章节中介绍。

    最后一个步骤展示了列表的sort和reverse操作。列表的内置函数sort()可以将列表的元素进行排序,默认是升序排序。本章后面有个专门的小节讲解排序。reverse()函数将列表中的元素进行反转。

    我们先来创建一个列表,元素是从1到19。

    a = range(1,20)

    random模块中有一个shuffle()函数,我们先用它将列表中的元素搅乱,然后我们才能演示排序操作,搅乱后的输出结果如下。

    [19, 14, 11, 12, 4, 13, 17, 5, 2, 3, 1, 16, 8, 15, 18, 6, 7, 9, 10]

    现在,a.sort()执行了一个位置排序,我们得到如下的输出结果。

    [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]

    reverse()也是一个位置操作,产生如下输出结果。

    [19, 18, 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1]

    1.6.4 更多内容

    栈或队列只能在一个方向上追加或弹出数据,而双端队列有两个端,可以在不同的端执行追加或弹出数据操作,请参见:

    https://docs.python.org/2/library/collections.html#collections.deque。

    最新回复(0)