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

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。

时间: 2024-10-21 12:03:47

《Python数据科学指南》——1.6 写一个列表的相关文章

《Python数据科学指南》——1.22 列表排序

1.22 列表排序 我们先讨论列表排序,然后扩展到对其他可迭代对象的排序. 1.22.1 准备工作 排序有两种方法,第1种是使用列表里内置的sort函数.第2种是使用sorted函数.我们通过示例来进行说明. 1.22.2 操作方法 我们来看看如何使用sort和sorted函数. # 先看一小段代码,对给定的列表进行排序 a = [8, 0, 3, 4, 5, 2, 9, 6, 7, 1] b = [8, 0, 3, 4, 5, 2, 9, 6, 7, 1] print a a.sort() p

《Python数据科学指南》——导读

前 言 如今,我们生活在一个万物互联的世界,每天都在产生海量数据,不可能依靠人力去分析产生的所有数据并做出决策.人类的决策越来越多地被计算机辅助决策所取代,这也得益于数据科学的发展.数据科学已经深入到我们互联世界中的每个角落,市场对那些十分了解数据科学算法并且有能力用这些算法进行编程的人才需求是不断增长的.数据科学是多领域交叉的,简单列举几个:数据挖掘.机器学习.统计学等.这对那些渴望成为数据科学家以及已经从事这一领域的人们在各方面都倍感压力.把算法当成黑盒子应用到决策系统里,可能会适得其反.面

《Python数据科学指南》——第1章 Python在数据科学中的应用 1.1 简介

第1章 Python在数据科学中的应用 在这一章里,我们将探讨以下主题. 使用字典对象 使用字典的字典 使用元组 使用集合 写一个列表 从另一个列表创建列表--列表推导 使用迭代器 生成一个迭代器和生成器 使用可迭代对象 将函数作为变量传递 在函数中嵌入函数 将函数作为参数传递 返回一个函数 使用装饰器改变函数行为 使用lambda创造匿名函数 使用映射函数 使用过滤器 使用zip和izip函数 从表格数据使用数组 对列进行预处理 列表排序 采用键排序 使用itertools 1.1 简介 Py

《Python数据科学指南》——1.9 生成一个迭代器和生成器

1.9 生成一个迭代器和生成器 上一节,我们了解了什么是迭代器,这一节我们来讨论如何生成一个迭代器. 1.9.1 准备工作 生成器提供了清晰的语法,能够依次访问一个序列,并不需要使用__iter__和next()这两个函数.我们也不用写一个类了.请注意,生成器和可迭代这两者才能制造一个迭代器. 1.9.2 操作方法 如果你理解了前面小节里的推导,我们下面的示例你也能明白,在这个示例中,我们有一个生成器推导.回忆一下,我们曾经用下面的方式来进行一个元组推导,并得到了一个生成器对象. SimpleC

《Python数据科学指南》——1.7 从另一个列表创建列表——列表推导

1.7 从另一个列表创建列表--列表推导 推导是从一个序列创建另一个序列的操作,例如,我们可以从列表或元组中创建一个列表.本节我们将讲述列表推导.一般地,列表推导具有以下特点. 序列,表示一个我们对其元素感兴趣的列表. 序列的元素拥有可变的表示方法. 使用输入序列的元素来产生输出表达式,以此产生输出序列. 一个可选的谓词表达式. 1.7.1 准备工作 我们先通过一个Python的脚本示例来理解列表推导中涉及的元素的不同之处.先输入一个列表,元素包含了一些正数和负数,我们希望得到的输出是由那些负数

《Python数据科学指南》——1.14 返回一个函数

1.14 返回一个函数 在这节里,我们讨论在一个函数里返回另一个函数. 1.14.1 准备工作 我们举一个高中的例子来说明咱们使用返回一个函数的函数.我们要解决的问题是:给定半径,求出不同高度的圆柱体的容积. 请参见:http://www.mathopenref.com/cylindervolume.html. Volume = area height = pi r^2 * h 上面的公式可以准确地求出圆柱体的体积. 1.14.2 操作方法 我们写一个简单的函数来演示在函数中返回函数的概念,此外

《Python数据科学指南》——1.2 使用字典对象

1.2 使用字典对象 在Python语言中,容器是一种对象,它能够容纳任意数量.任意类型的对象.它可以对子对象进行操作,还可以迭代操作.字典.元组.列表还有集合都是容器对象.在collections模块中,Python提供了更多的容器类型.在这一节中,我们先来仔细了解字典. 1.2.1 准备工作 我们先通过一个Python的脚本示例来理解字典是如何操作的,这段脚本用来统计词频,也就是每个词在给定的文本中出现的次数. 1.2.2 操作方法 下面的示例演示了在Python中对字典对象如何操作.通过对

《Python数据科学指南》——1.8 使用迭代器

1.8 使用迭代器 毫无疑问,对于数据科学的程序而言,数据是极其重要的输入.数据的大小是可变的,有些能装载到内存中,有些则不能.而记录访问架构也是随一种数据格式到另一种而变化.有趣的是,不同的算法处理数据时,需要的是可变长度的组块.例如,假如你在写一个随机梯度下降的算法,你希望在每个时间片传送5000条记录的数据块,如果你对如何访问数据.理解数据格式.依次传送数据.给调用者需要的数据等流程有着清晰的概念,那你才能成功.这样能让你写出清晰的代码.大多数时候,最有趣的部分是我们如何处理数据,而不是我

《Python数据科学指南》——2.2 使用NumPy库

2.2 使用NumPy库 Python中,NumPy提供了一条高效处理超大数组的途径.大多数Python科学计算库中都在内部使用NumPy处理数组和矩阵操作.在本书中,NumPy被广泛应用,我们在本节介绍它. 2.2.1 准备工作 我们先写一系列语句来操作数组和矩阵,学习如何使用NumPy.目的是让您习惯使用NumPy数组,它也是本书大多数内容的基础. 2.2.2 操作方法 我们先创建一些简单的矩阵和数组. # Recipe_1a.py # 导入NumPy库,命名为np import numpy