数据结构


数据结构

数据结构,就是一些数据的集合。换个说法,数据结构存储一系列相关的数据。
内置有四种数据结构列表、元组、词典和集合。下面看看怎么使用他们。


列表

列表这种数据结构存储一个有序集合。它就类似于购物清单,不同之处是购物清单里的元素一行一行,但是列表里的元素用逗号分隔。
列表的元素被方括号括起来,这样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来删除键值对。只需要在下标操作符里填入要删除的键值对的关键字就可以了。
下面

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,736评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,167评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,442评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,902评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,302评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,573评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,847评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,562评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,260评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,531评论 2 245
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,021评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,367评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,016评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,068评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,827评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,610评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,514评论 2 269

推荐阅读更多精彩内容