python的五种数据结构

Python有四种数据结构,这里再加上字符串,所以共有五种:

字符串(string)、列表(list)、元组(tuple)、字典(dictionary)和集合(set)。

加上字符串是因为它与其它数据结构有些相似的地方,放进来一起讲比较方便。

一、定义方法

字符串用引号

例如:name='Swaroop'

列表用方括号

例如:shoplist=['apple','mango','carrot','banana']

元组用圆括号

例如:zoo=('python','elephant','penguin')

但元组在定义时,也可以不用括号,例如:

Number=1,2,3,4,5

特别地,如果元组中只有一个元素,它后面需要一个逗号

例如:aNumber=1,

当用print输出时,元组有圆括号,所以,用圆括号括住是常规状态。

字典用花括号

例如:ab={

'Swaroop':'swaroop@swaroopch.com',

'Larry':'larry@wall.org',

'Matsumoto':'matz@ruby-lang.org',

'Spammer':'spammer@hotmail.com'

}

字典的每个元素有两个成份:键值和值。在定义时要成对地指定键值与值(前面的是键值,后一个是值)。

每一对之中用冒号隔开,各对用逗号隔开。

集合用set()方法

这是与前面的数据结构都不一样的地方。

例如:bri = set(['brazil', 'russia', 'india'])

注意参数的形式跟列表一样。

二、分类

1 可变与不可变

列表、字典和集合是可变的。它们的元素可以修改,可以添加、删除元素。

字符串和元组是不可变的,里面的元素不可以修改,也不可以添加、删除元素。

2 序列与非序列

列表、元组和字符串是序列。

序列同时具有三个特点:

(1)in和not in运算符测试元素资格(在与不在)。

(2)有索引操作,可以直接获取序列中的元素。

(3)有切片操作,取序列中的一部分。

字典和集合不是序列。

字典和集合都有(1),但没有(2)和(3)

三、访问元素的方法

序列可以用数字下标访问元素,非序列不可以用这种方法。

字典,用键值访问值,例如:ab['Swaroop']。

集合不可以访问到里面的元素。

四、删除

1 都可以整体删除,用del

2 列表、字典和集合都可以删除其中的元素,字符串和元组不可以。

(1)列表用del删除元素,例如:del shoplist[0]

(2)字典用del删除元素,例如:del ab[’Spammer’]

(3)集合用remove方法,例如:bri.remove(’India’)

五、添加成员

元组和字符串不可变,所以不能添加成员。

1 列表,用append()方法

例:shoplist.append('rice')

2 字典,直接输入

例:ab['Guido']='guido@python.org'#添加成员

3 集合,用add()方法

例:bric.add('china')

六、都可以用print方法整体输出

1 字符串显示内容,没有引号

2 列表要显示方括号

3 元组要显示圆括号

4 字典要显示花括号

5 集合要显示花括号(注意它定义时,参数用的是方括号)

七、赋予变量和产生副本

1 字符串名如果赋予另一个变量,会产生一个副本。没有两个变量指向同一个字符串的情况。

2 元组名赋予另一个变量,会产生一个副本。没有两个变量指向同一个元组的情况。

3 列表名赋予一个变量,则它们指向同一个列表,并没有产生新的列表。也就是说,这个列表有了两个名字。

要产生副本,使用切片操作。例如:

s=shoplist[:]

4 字典名赋予另一个变量,它们指向同一个字典。要产生副本,使用copy()方法。例如:

a=ab.copy()

5 集合名赋予另一个变量,它们指向同一个集合。要产生副本,使用copy()方法。例如:

b=bri.copy()

八、元素个数都用方法len()

九、遍历

五种数据结构都可以使用遍历,方法类似。

注意字典的一个元素有两个成分。

for item in shoplist:#shoplist是一个列表

print(item,end=' ')

for item in zoo:#zoo是一个元组

print(item,end=' ')

for item in name:#name是一个字符串

print(item,end=' ')

for n,a in ab.items():#name是一个字典

print('Contact {} at {}'.format(n,a))

for x in bri:#bri是一个集合

Print(x)

十、切片运算(序列具有)

参数用方括号表达一个区间。

1 完整参数

方括号里面有三个数值,用冒号隔开。

第一、二个是下标,给出一个左闭右开的区间,即从第一个下标开始,到第二个下标的前一个终止。

例如[1:3]的意义是1,2。

第三个数值的意义是步长,省略了就是1。例如[1:3]相当于[1:3:1]。

2 省略

方括号里面还可以省略到一个数值和没有数值,但冒号必不可少。

一个数值的例子:[2:],意义是从下标2到最后,步长为1。

没有数值的例子:[:],意义是全部,步长为1。

3 步长的正负及与区间方向的配合

步长可以为正,也可以为负。为正表示从下标从小到大,为负表示从大到小。前面两个数值也表达了方向,这两个必须一致,否则没有结果。

例如,[1:3]是1,2,而[1:3:-1]则没有结果。因为前面是从小到大,而步长表达是从大到小,写成[3:1]就有结果,为3。

4 负下标

-1,是最后一个元素(0是最前面一个)

负的下标,是从后面向前推进。

例如:

name=’Swaroop’

则name[-1]为p,name[1:-1]为waroo

十一、排序

列表用sort()方法,没有任何参数时是升序。

例如:

shoplist.sort()#升序

shoplist.sort(reverse=True)#降序

当然可以用reverse=False表示升序,但没有必要。

字符串和元组因为不可改变,不存在排序的问题。

集合没有顺序,字典用其它方法排序。

十二、连接运算

用字符串的join()方法

以下,定义字符串delimiter='_*_'

1 列表

例:

mylist=['Brazil','Russia','India','China']

print(delimiter.join(mylist))

结果:

Brazil_*_Russia_*_India_*_China

2 元组

例:

zoo=('python','elephant','penguin')

print(delimiter.join(zoo))

结果:

python_*_elephant_*_penguin

3 字符串

例:

name='swaroop'

print(delimiter.join(name))

结果:

s_*_w_*_a_*_r_*_o_*_o_*_p

4 字典

把键值连接起来,跟值无关。

例:

ab={

'Swaroop':'swaroop@swaroopch.com',

'Larry':'larry@wall.org',

'Matsumoto':'matz@ruby-lang.org',

'Spammer':'spammer@hotmail.com'

}

print(delimiter.join(ab))

结果:

Swaroop_*_Larry_*_Matsumoto_*_Spammer

5 集合

例:

bri = set(['brazil', 'russia', 'india'])

print(delimiter.join(bri))

结果:

india_*_brazil_*_russia

十三、其它

1 元组在定义时,如果只有一个元素,由其后要用逗号

例如:singleton = 2,  或:singleton=(2,)

2 元组在定义时,可以用其它元组作元素

例如:

zoo=('python','elephant','penguin')

New_zoo='monkey','canmel',zoo

3 集合有判别超集的方法

例:print('bri是否为bric的超集:',bri.issuperset(bric))

4 集合的与运算

例:print('bri与bric重合的元素为:',bri & bric)

这个运算可以用intersection()方法代替:bri.intersection(bric)

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

推荐阅读更多精彩内容