Python基础概念_7_数据结构

来源:互联网 发布:美工陈列是做什么 编辑:程序博客网 时间:2024/06/05 09:49

数据结构

8 数据结构

8.1简介

数据结构是什么?它是计算机存储、组织数据的方式。Python 中有常用的数据结构: 列表、元组、字典和集合。

8.2 列表

列表(list)是一种按顺序存储的数据结构。

8.2.1 列表简介

还是那句话,计算机是对现实的抽象,让我们从身边找些数据结构的例子吧。




上面的这幅图是我们常见的排队的例子,先来的乘客排在前面,后面的紧跟其后。那么我们将这种结构抽象起来,它就是队列:一种按照顺序组织的结构。让我们回顾下排队时可能会有哪些场景:

 

Ø 场景一:乘务员站按照离车门最近的顺序检票,此时每检完一个,队列里就少一个人。

Ø 场景二:乘务员说后来的同志请站在队列的后面,此时队列里又多了人。

Ø 场景三:乘务员说大家按照个子大小排个队,排好了我再检票。

Ø 场景四:乘务员看排在第五位的人可疑,就没按照顺序检票,而是直接问那个人“这位同志你的票呢?”

Ø 场景五:乘务员说“这位抱小孩的先检票吧,各位理解下”

Ø ……

 

通过乘务员检票的方式,我们不能抽象出队列有如下几类常用的方法:

增加元素、删除元素、元素排序、索引访问、插入等等。

 

8.2.2 列表常用方法

这里我们通过一个简单的例子来揭开列表的神秘面纱。假设我们定义一个我的朋友军训的列表叫Myfriends,具体操作见下:

 

#增加、插入、删除元素

MyFriends=['hanmeimei','tom','lilei','polly','jim']

print("我当前朋友的排列顺序是:\t"+str(MyFriends))

MyFriends.append('lily')

print("我当前朋友的排列顺序是:\t"+str(MyFriends)+"新增的lily在最后")

MyFriends.insert(2,'lucy')

print("lucy插到第三个位置后,我当前朋友的排列顺序是:\t"+str(MyFriends))

 

 

#访问List里的元素

print("我当前朋友排在第一个的是:\t"+str(MyFriends[0]))

print("我当前朋友排在最后一个的是:\t"+str(MyFriends[-1]))

#注意这里是左闭右开,即右边取不到

print("截取后,我当前朋友的排列顺序是:\t"+str(MyFriends[2:-1]))

print("我当前朋友的排列的长度是:\t"+str(len(MyFriends)))

 

 

forfriend in MyFriends:

    print(str(friend)+"排在第"+str(MyFriends.index(friend)+1)+"位"+",它对应的索引号是"+str(MyFriends.index(friend)))

 

#删除指定的元素lucy

MyFriends.remove('lucy')

print("删除lucy后,我当前朋友的排列顺序是:\t"+str(MyFriends))

MyFriends.pop()

print("pop最后一个元素后,我当前朋友的排列顺序是:\t"+str(MyFriends))

delMyFriends[3]

print("删除第4个元素后,我当前朋友的排列顺序是:\t"+str(MyFriends))

 

 

#排序、反转

MyFriends.reverse()

print("反转后,我当前朋友的排列顺序是:\t"+str(MyFriends))

 

MyFriends.sort()

print("排序后,我当前朋友的排列顺序是:\t"+str(MyFriends))

 

来张表格更直观些:

 

函数名

功能介绍

示例

append

在列表后追加元素

lista.append('lily')

insert

在指定位置增加元素

lista.insert(2,'lucy')

extend

通过另外个list扩充当前list

lista.extend(listb)

remove

删除list里指定的元素

lista.remove('lucy')

del

删除list里的元素或则整个list

del lista[2]

del lista

pop

删除list里最后一个元素

lista.pop()

reverse

list里的顺序逆转

lista.reverse()

sort

list里的元素排序

lista.sort()

max

list里的最大值

max(lista)

min

list里的最大值

min(lista)

len

list的长度

len(lista)

count

list里某个元素出现的次数统计

lista.count('lucy')

index

list里某个元素出现的索引号

lista.index('lucy')

cmp

比较两个列表的元素

cmp(lista,listb)

list

将一个元组转为list

list(tupleA)

……

……

……

 

 

8.3 元组

理解了列表,那么元组(tuple)就很好理解,它跟列表很类似,但不能修改元素的值。打个比方,元组是中国的一段朝代顺序表dynasty: 唐、宋、元、明、清,那么显然这个列表是不能更新的,顺序一致都是这样,除非时光可以倒流。

 

一般我们这样元组定义:

tuplea =('abcd', 786 , 2.23, 'john', 70.2 ),这里元素通过小括号(“()”)包裹起来,而列表则是通过中括号包(“[]”)裹起开。

 

鉴于元组类似于列表,这里不做详细展开。如下附录了元组里常用的方法:

 

函数名

功能介绍

示例

cmp

比较两个元组里的元素

cmp(tuplea,tupleb)

del

删除整个tuple

del tuplea

max

tuple里的最大值

max(tuplea)

min

tuple里的最小值

min(tuplea)

len

tuple的长度

len(tuplea)

tuple

list转tuple

tuple(lista)

……

……

……

 

8.4 字典

字典(dictionary)是一种灵活的通过key=>value(键值)来存储数据的结构。

 

8.4.1 字典简介

这里有一个最容易理解的例子就是我们的身份证号,它就相当于一个key,通过他可以找到你的姓名,年龄,地址等信息。这里为了简单,我们仅仅假设key是身份证号,value是姓名,这个简单的字典就叫id.当然如果你对之前的list章节理解了,其实你可以假设这里的key是身份证,而value是一个list,它里面有元素:姓名、年龄、地址等。好了,围绕这个字典id,我们能想到它的哪些特点呢?

 

首先身份证号是唯一的

其次这里的身份证号是不可以变的,即便户口迁了,身份证还是没变

再有身份证号对应的姓名是可以重复的

 

一般我们通过key:value,然后以大括号包裹起来定义一个字典:

dicta = {'Alice':'2341', 'Beth': '9102', 'Cecil': '3258','John': '3258'}

dictb = {'Alice':'2341', 'Beth': '9102', 'Cecil': '3258'}

 

8.4.2 字典常用方法

这里通过表格列举下字典里常用的方法:

 

函数名

功能介绍

示例

str

以字符串形式显示字典

str(dicta)

cmp

比较两个字典里的元素

cmp(dicta,dictb)

copy

返回一个字典的拷贝

dicta.copy()

clear

清空dict里的所有元素

dicta.clear()

get

通过key找对应的value,如果没有可指定默认值

dicta.get('lily',default= '莉莉')

has_key

判断字典里是否有某个key

dicta.has_key('lily')

values

以列表形式返回字典里的元素

for i in dicta.values:

    print(i)

keys

以列表形式返回字典里的键

for i in dicta.keys:

    print(i)

update

把另外个字典里的键/值对更新到当前字典里

dicta.update(dictb)

 

8.5 集合

集合是无序的数据的组合。它跟list 很像,但是set的元素没有重复,而且是无序的。

 

8.5.1 集合简介

这里集合不是个新概念,它对应数学里的集合,可以进行交、差、并等操作。




一般我们通过set关键字结合小括号、中括号来定一个一个集合:

seta =set(['A', 'B', 'C'])

 

集合一般分为两类:可变集合(set)和不可变集合(frozenset)

可变集合可对集合内元素进行改变,而不可变集合则不行。

 

8.5.2 集合常用方法

 

 

函数名

功能介绍

示例

add

像集合里添加元素

s = set('beginman')

s.add(0)

update

更新集合

s.update('MM')

remove

删除集合的里的指定元素

s.remove('D')

|/union

两个集合的并集

s1=set('begin')

s2=set('man')

s3=s1|s2

s4= s1.union(s2)

&/intersection

两个集合的交集

s1=set('begin')

s2=set('man')

s3=s1&s2

s4=s1.intersection(s2)

-/difference

两个集合的补集

s1=set('begin')

s2=set('man')

s3=s1-s2

s4=s1.difference(s2)

list

集合转list

s1=set('begin')
list(s1)

tuple

集合转tuple

s1=set('begin')
tuple(s1)

str

集合的字符串表示

s1=set('begin')
str(s1)

copy

返回一个集合的拷贝

s1=set('begin')

s1.copy()

issubset

判断一个集合是另外个的子集

s1=set('begin')

s2=set('man')

s1.issubset(s2)

clear

清空集合里的元素

s1=set('begin')

s1.clear()

pop

删除集合中任何一个元素,并返回它

s1=set('begin')

s1.pop()

discard

如果是集合中的元素就删除它

s1=set('begin')

s1.discard()

 

8.6 总结

通过本章的学习我们知道了Python 内建的数据结构以及他们的常用方法,这些数据结构将是编写程序时至关重要的组成部分。


原创粉丝点击