数据结构
数据结构,就是一些数据的集合。换个说法,数据结构存储一系列相关的数据。
内置有四种数据结构列表、元组、词典和集合。下面看看怎么使用他们。
列表
列表这种数据结构存储一个有序集合。它就类似于购物清单,不同之处是购物清单里的元素一行一行,但是列表里的元素用逗号分隔。
列表的元素被方括号括起来,这样Python能够知道它是一个列表。当创建了一个列表时,你可以添加、移除元素,所以列表是可以被修改的数据结构。
对象和类的简单介绍
为了更好的理解列表,这里对对象和类做个简短的介绍,后面的章节有详细的介绍。
列表是对象和类的一种用法。当我们定义变量i,并给它赋值5,就创建了一个整数类型的对象。你可以阅读int的帮助文档来更好地理解(help(int)
)。
类有方法,也就是仅当前类能使用的函数。当你有这个类创建的对象时,才能使用这些函数。举个例子,Python给列表类提供了尾加元素的方法,比如,mylist.append('an item')将会在mylist列表尾添加一个字符串'an item'。注意,要通过点号来获取对象的方法。
类也有域,也就是仅当前类能使用的变量。当你有这个类创建的对象时,才能使用这些变量。域也是通过点号来获取的,比如,mylist.field。
例子(保存至ds_using_list.py
):
shoplist = ['apple', 'mango', 'carrot', 'banana']
print('I have', len(shoplist), 'items to purchase.')
print('These items are:', end=' ')
for item in shoplist:
print(item, end=' ')
print('')
print('I also have to bue rice.')
shoplist.append('rice')
print('My shoplist is now', shoplist)
print('I will sort my list now.')
shoplist.sort()
print('Sorted shoplist is', shoplist)
print('The first item I will buy is', shoplist[0])
print('I bought the', shoplist.pop(0))
print('My shoplist is now', shoplist)
输出:
$ python ds_using_list.py
I have 4 items to purchase.
These items are apple mango carrot banana
I also have to bue rice.
My shoplist is now [apple, mango, carrot, banana, rice]
I will sort my list now.
Sorted shoplist is [apple, banana, carrot, mango, rice]
The first item I will buy is apple
I bought the apple
My shoplist is now [banana, carrot, mango, rice]
它是怎么运作的呢?
购物清单列表里的变量就是某人要去超市要买的东西。购物清单列表里只是存储了要买东西的名字,你也可以往列表里添加任意的对象,可以是数字、甚至列表。
这里我们用到了for..in循环去迭代列表里的元素。你需要了解列表是一个序列。序列的详细知识在后面章节。
注意,print的end参数,表示打印输出的结尾用什么符号。
接下来,我们往列表里添加了一个元素。然后查看列表是否有了这个元素。把列表作为参数值直接传入print函数,也会有漂亮的打印结果。
然后,我们给列表排序,用的是列表的方法sort。重要的是,它会改变列表里元素排列的顺序,同字符串排序不同的是,它是在修改原来的列表,并不是返回一个新的列表。为什么常说的列表是可以更改的,这就是原因。
下面,我们买了一个购物清单上的东西,所以需要把它从清单上去掉。用del语句删除列表中的元素。
如果你想知道list对象定义的所有方法,用help(list)查看详情。
元组
元组用来存储多个对象。它同列表相似,但是没有追加的功能。元组的一个主要特性是,不能被修改,就像字符串一样。
元组的元素用逗号分隔,元组要用小括号括起来。
元组经常用在集合的元素不能被重新赋值的地方。
例子(保存在ds_using_tuple.py
):
zoo = ('python', 'elephant', 'penguin')
print('Number of animals in the zoo is', len(zoo))
new_zoo = 'monkey', 'camel', zoo
print('Number of cages in the new zoo is', len(new_zoo))
print('All animals in new zoo are', new_zoo)
print()...
输出:
它是怎么运作的?
zoo是一个包含多个元素的元组。我们可以使用len函数来获取元组的长度,也就是元组元素的个数。这也说明了元组是一个序列。
旧的动物园要关闭了,所以现在要把这些动物搬到新的动物园。于是,表示新动物园的元组应该包含现有的动物和旧动物园搬来的动物。元组里嵌套元组,是可以的。
可以用下标来获取元组的元素,下标也就是元素在元组的位置,用方括号来表示。所以要获取新动物园的第三个元素,可以输入new_zoo[2],如果要获取嵌套元组的元素,可以输入像new_zoo[2][2]的代码。
元组是空和有一个元素的情况:
一个空元组用一对小括号表示,括号里没有元素。但是有一个元素的元组表示起来就没有那么简单了。你必须在第一个元素后面加一个逗号,这样Python才能识别出它是一个元组,而不是一个括号括起来的对象。也就是说,一个元素的元组应该类似于 sigleton = (2,)。
给Perl程序猿的提示:
列表里可以嵌套列表。。。巴拉巴拉
字典
字典类似于地址薄,比如说你可以通过姓名查找到他/她的地址等等信息,也就是关键字(姓名)和值(地址等信息)是有对应关系的。注意,关键字必须是唯一的。如果两个人的名字一样,你能确定他/她的地址信息吗?
注意,字典里的关键字必须是不可修改的类型,比如字符串。字典的值可以是任意类型。一般情况,关键字用些简单的对象来表示。
键值对,也就是一对关键字和值,用关键字加冒号加值来表示,像d = {key1: value1, key2: value2}。注意,关键字和值用冒号分隔,键值对用逗号分隔,字典用大括号括起。
记住,字典里的键值对是无序的,因此如果想要有序的用它,你就要在用它之前就进行排序。
你在使用的字典属于dict类的对象。
例子(保存至ds_using_dict.py
):
ab = {...}
输出:
它是怎么运作的呢?
先是创建了一个字典ab
。然后通过下标操作符来取关键字对应的值。
使用del来删除键值对。只需要在下标操作符里填入要删除的键值对的关键字就可以了。
下面