python组合数据类型总结_Python学习笔记(4):常用的组合数据类型

序列类型

列表:list

列表的特点:

用方括号[]括起来

内容的元素用逗号”,”间隔开

各元素可以是各种数据类型:字符型,整数型,浮点型,列表,字典,均可

列表内元素的下标是0

列表的运用

列表元素的索引:取列表中的元素

a=[1,2,'adggd',3,['x','y','z'],4,5] #此为初始化列表

print(a)

[1,2,'adggd',3,['x','y','z'],4,5]

print(a[2])

adggd

print(a[4][1]) #要取列表中第几个元素,就在列表名后用方括号里面输入第几(注意:下标是0开始)

y

列表元素的编辑

列表元素的添加:在最后添加一个元素,用: 列表名.append(新元素)---对比:字符串无append这个添加功能

a=[1,2,3,4,5,6]

a.append("ok")

print(a)

[1,2,3,4,5,6,"ok"]

列表元素的插入:在列表元素中间或最前面插入一个新元素,用: 列表名.insert(插入位置,新插入的元素)

a=[1,2,3,4,5,6]

a.insert(4,100) #在列表的第四个元素位置插入整数100

print(a)

[1,2,3,4,100,5,6]

a.insert(0,999) #再在列表的第0个元素位置(即最前面 )插入整数999

print(a)

[999,1,2,3,4,100,5,6]

列表元素的修改:用赋值的方式,将第几个元素修改

a=[1,2,3,4,5,6]

a[2]=688 #将第3个元素即整数'3'修改为整数'688'

print(a)

[1,2,688,4,5,6]

列表元素的删除:列表名.pop(元素位置)

删除最后一位元素:列表名.pop(),里面为空

a=[1,2,3,4,5,6]

a.pop() #将最后那个元素删除

print(a)

[]1,2,3,4,5]

删除第N位元素:列表名.pop(N)

a=[1,2,3,4,5,6]

a.pop(3) #将第4元素删除

print(a)

=[1,2,3,5,6]

列表地址的传引用,相当于"传址"

首先,对比一下变量之间传值的区别:把变量a的值传给变量b,变量b的值变了,变量a的值不会改变,这叫"传值"

a=123

b=a

b=456

print(b)

456

print(a)

123

其次,看一下列表之间传引用的区别:把列表a的传引用地址传给变量b,变量b的值变了,变量a的也会发生改变,这叫"传引用"

a=[1,2,3,4,5,6]

b=a

b[2]=99

print(b)

[1,2,99,4,5,6]

print(a)

[1,2,99,4,5,6]

最后,看一下列表之间想达到传值的效果:把列表a的值传给列表b,列表b的值变了,列表a的值不会改变,采取方法,传的列表后面加上[:],相当于用[:]就是把a列表的值复制了,并传给列表b

a=[1,2,3,4,5,6]

b=a[:]

b[2]=99

print(b)

[1,2,99,4,5,6]

print(a)

[1,2,3,4,5,6]

列表的切片处理:

方括号里用冒号[:],前面跟不同的整数

切片的特点:前闭后开,即前面包括,后面不包括

列表的切片

切取第N个(包括第N个)元素到最后一个元素,方法:[N:]**

a=[1,2,3,4,5,6,7]

b=a[2:]

print(a)

[1,2,3,4,5,6,7]

print(b)

[3,4,5,6,7]

切取最前面的元素到第N个前面(不包括第N个)那个元素,方法:[:N]**

a=[1,2,3,4,5,6,7]

b=a[:2]

print(a)

[1,2,3,4,5,6,7]

print(b)

[1,2]

切取第N个(包括第N个)到第M个(不包括第M个)之间的元素,方法:[N:M]**

a=[1,2,3,4,5,6,7]

b=a[2:5]

print(a)

[1,2,3,4,5,6,7]

print(b)

[3,4,5]

切取倒数第N个元素,方法:[-N]**

a=[1,2,3,4,5,6,7]

b=a[-1]

print(b)

7

c=a[-2]

print(c)

6

切取第N个(包括N)到倒数第M个(不包括M)元素,方法:[N,-M]**

a=[1,2,3,4,5,6,7]

b=a[2:-2]

print(b)

[3,4,5]

步进式跳着切取元素,在切片后面用冒号:,紧跟步进数值,方法:[M:N:K],K为步长**

a=[1,2,3,4,5,6,7]

print(a[2:6:2]) #从第三个元素3(含)切片到第七个元素7(不含),步长为2,即隔一个元素切取

[3,5]

b=a[:] #结果还是为:[1,2,3,4,5,6,7],相当于复制,未切片,见前面"**列表传址引用**"

[1,2,3,4,5,6,7]

b=a[::] #结果还是为:[1,2,3,4,5,6,7],相当于复制,未切片

[1,2,3,4,5,6,7]

b=a[::1] #步长为1,结果还是为:[1,2,3,4,5,6,7],相当于复制,未切片

[1,2,3,4,5,6,7]

c=a[::2] #结果为:[1,3,5,7],全部切片,步长值为2,即隔一个元素切片

[1,3,5,7]

d=a[::3] #结果为:[1,4,7]

[1,4,7]

元素倒序排列,方法:[::-N]**

a=[1,2,3,4,5,6,7]

b=a[::-1] #结果为:

[7, 6, 5, 4, 3, 2, 1]

c=a[::-2] #结果为:

[7, 5, 3, 1]

d=a[::-3] #结果为:

[7, 4, 1]

字符串:string

字符串的特点:

列表的特点及与列表相比的区别:

用单引号''或双引号""引起来---而列表是用方括号[]括起来

内容的元素不用需用逗号间隔开---而列表必须用逗号","间隔开

各元素是字符型---而列表的元素可以是各种数据类型:字符型,整数型,浮点型,列表,字典均可

字符串内元素的下标是0---列表也一样

切片特点:前闭后开(即前面包括后面不包括)

字符串不能直接添加(追加)\插入\修改\删除字符,其他切片功能与列表相似

字符串的运用

字符串与列表相同之处:切片完全一样

a='abcdefg'

b=a[2] #结果为: c

c=a[2:] #结果为: cdefg

d=a[:2] #结果为: ab

e=a[2:5] #结果为: cde

f=a[2:-3] #结果为: cd

g=a[::1] #结果为: abcdefg,相当于复制,未切片

h=a[::-1] #结果为:gfedcba,全部倒序排列

i=a[::-2] #结果为:geca,倒序跳着间隔一个,即间隔(含)两个切取

字符串与列表不一样的地方:无如下编辑功能

j=a.append() #字符串跟列表不一样,无append这个添加元素功能

k=a.insert(1,'x') #字符串跟列表不一样,无insert这个插入元素功能

l=a.pop(0) #字符串跟列表不一样,无pop这个删除元素功能

a[1]='x' #字符串跟列表不一样,无修改元素的功能

元组:touple

元组用()表示,里面的元素用,隔开

元组的特点:

元组元素的索引、切片方法跟列表一样如:

a=(1,2,3,4,5) #初始化元组

b=a[2]

print(b) #结果为:

3

a=(1,2,3,4,5) #初始化元组

b=a[2:4]

print(b) #结果为:

(3,4)

元组内元素不能直接用append,insert,赋值等方式修改

元组内元素若要修改,需要先转成列表(list),修改后再从列表转为元组(tuple)

a=(1,2,3,4,5,6)

b=list(a) #元组转换为了列表b:[1, 2, 3, 4, 5, 6]

print(b)

[1, 2, 3, 4, 5, 6]

b[2]=99 #用赋值的方式,将列表b第二个元素3修改为99

c=tuple(b) #又将列表b转换在元组c:(1, 2, 99, 4, 5, 6)

print(c)

(1, 2, 99, 4, 5, 6)

元组内的元素若是列表,则可以对里面的列表元素内的列表元素进行修改:

a=(1,2,3,4,[“X”,”y”,”z”],6)

a[4][1]=”此处修改了”

print(a)

(1,2,3,4,[“X”,” 此处修改了”,”z”],6)

#说明,这里并不是元组的元素被修改了,而是对应元素的列表引用里面的元素被修改了

元组的初始化:

A=() #初始化一个空元组

B=(“hello”,) #初始化只有一个元素的元组

'''注意一定加逗号`,`若不加逗号`,`,圆括号里面的数据是什么类型,那么初始化的B就是什么类型,而不是元组;

比如B=(“hello”)就是字符型,B=(4)就是整数int型''',而不是元组

映射类型

字典:dict

字典的特点:

字典dict,全称dictionary,在其他语言中也称为map,使用键:值(key:value)存储,具有极快的查找速度。

书写方式用花括号括起来,都是成对出现,前者为key(键值),后者为value(值)

字典内的各组key和value无序

a={'a':'xyz','b':123,'c':23.15}

print(a) #打印出来实际为如下等多种顺序

{'c': 23.15, 'a': 'xyz', 'b': 123}

字典value读取的方式:

方式一:key方式:

若读取没有的key,则程序将报错

a={'a':'xyz','b':123,'c':23.15}

print(a['a']) #结果为:

xyz

print(a['e']) #读取没有的key:'e'时,程序会报错:

KeyError: 'e'

方式二:get方式:

若读取没有的key,则程序不会报错,而是打印结果:None,或自定义提示信息

a={'a':'xyz','b':123,'c':23.15}

print(a.get('b')) #结果为:

123

print(a.get('e')) #打印结果:

None

print(a.get('e','没有找到!')) #打印结果:

没有找到!

字典的items()方法:

a={'a':'xyz','b':123,'c':23.15}

k=a.items()

print(k) #结果为:

dict_items([('b', 123), ('a', 'xyz'), ('c', 23.15)]) #注意:此处顺序会变,因为字典的无序性,下面结果也会变

print(list(k)) #结果为元素是元组的列表或别的顺序列表:

[('c', 23.15), ('b', 123), ('a', 'xyz')]

print(list(k)[1]) #结果为上面列表的第一个元素的元组或别的顺序元组

('a', 'xyz')

print(list(k)[1][1]) #结果为上面元组的第一个元素 或别的

xyz

in判断键值key是否在字典中:

in方式,可判断相应的键值key是否在此字典之中,若在则返回True,若不在则返回False

a={'a':'xyz','b':123,'c':23.15}

'b' in a

True

'd' in a

False

字典元素的增减

字典元素的添加:是以新赋值的方式实现

a={'x':'how','y':'are'}

a['z']='you ?' #给新KEY赋值的方式添加字典元素

print(a)

{'z':'you ?','x':'how','y':'are'} #字典是无序的,随时打印出来的位置会变

字典元素的删除

用pop()方法删除相应的key,其value也一块删除

a={'x':123,'y':456,'z':'wow'}

a.pop('z')

print(a) #结果为:

{'x': 123, 'y': 456}

由元组构成的列表,可以转成字典

a=[('b', 123), ('a', 'xyz'), ('c', 23.15)]

b=dict(a)

print(b) #结果为: ,顺序会变

{'a': 'xyz', 'b': 123, 'c': 23.15}

print(b['b']) #结果为:123 ,取出key'b'对应的value

123

字典和列表比较,各自的特点:

字典的特点:

查找和插入的速度极快,不会随着key的增加而变慢;

需要占用大量的内存,内存浪费多。

列表list的特点:

查找和插入的时间随着元素的增加而增加;

占用空间小,浪费内存很少。

所以,dict是用空间来换取时间的一种方法。

集合类型

集合:set

集合的特点:

用花括号,元素间用逗号隔开

转换成集合用:set

集合set和字典dict类似,也是一组key的集合,不同的是集合不存储value。由于key不能重复,所以,在集合set中,没有重复的key。

因为由于key不能重复,集合元素的唯一性,所以集合元素不能是可变对象如列表,即列表不能作为集合元素,否则会报错.试试看:

a={1,2[3,4]}

#TypeError:unhashable Typle:'list' #错误的类型:列表

集合的无序性:集合里面的元素是无序性的,不能直接索引,如:a={1,2,3,4,5},无法通过a[2]的方式索引到里面的元素”3”

集合的单一性:集合里的元素均是唯一的,不会重复,用此功能,可以将列表转换为集合去重,再转换为列表使用的功能

a=[1,2,2,2,3,4,5,6] #先初始化一个列表a

b=set(a) #将列表a转换为集合b,同时去重

print(b) #打印结果为:

{1, 2, 3, 4, 5, 6}

a=list(b) #将集合b转换为列表a:[1, 2, 3, 4, 5, 6],已将重复的"2"去掉

print(a)

[1, 2, 3, 4, 5, 6]

集合的三种操作

集合的交集,即求同:

a=[1,2,2,2,3,4,5,6,7] #初始化列表a

b=[1,2,3,4,5,6,7,8,9] #初始化列表b

c=set(a)&set(b) #列表a及列表b转换成集合,求交集

print(c) #结果为:

{1, 2, 3, 4, 5, 6, 7}

集合的并集,即合并,把所有相同及不同的元素合并在一起,接上示例:

d=set(a)|set(b)

print(d) #结果为:

{1, 2, 3, 4, 5, 6, 7, 8, 9}

集合的求异:

e=set(b)-set(a)

print(e) #结果为:{8, 9},即把b列表在a列表中没有的元素找出来

集合的编辑

通过add(key)方法可以添加元素到set中,可以重复添加,但不会有效果:

s = set([1, 1, 2, 2, 3, 3])

s

{1, 2, 3} #有重复元素的列表,转换为集合后去重

s.add(4) #添加一个元素`4`

s

{1, 2, 3, 4}

s.add(4) #重复添加'4',但不会有效果

s

{1, 2, 3, 4}

通过remove(key)方法可以删除集合的指定元素:接上示例:

s.remove(4) #把元素'4'删除

s

{1, 2, 3}

组合数据类型之间的转换

列表与字符串的转换

列表转为字符串:

处理方法: 拼接符.join(列表名)

注意:元素为数值等类型如[1,2,3]这类列表,不能直接拼接

示例:

a=['x','y','z']

b=''.join(a) #结果是:

'xyz'

c='*'.join(a) #结果是:

'x*y*z'

print(b)

print(c)

字符串转为列表

条件:字符串内,字符之间要有明显的分隔符

处理方法:字符串名.split('分隔符')

示例:

a='Q_W_E_R_T'

b=a.split('_')

print(b) #结果为:

['Q', 'W', 'E', 'R', 'T']

由成对元素组成的元组所构成的列表,可以转成字典

a=[('b', 123), ('a', 'xyz'), ('c', 23.15)]

b=dict(a)

print(b) #结果为: ,顺序会变

{'a': 'xyz', 'b': 123, 'c': 23.15}

print(b['a']) #结果为:123 ,取出`key':`b'对应的value

xyz

列表list、元组tuple、集合set之间相互转换

a=[1,2,3]

b=(4,5,6)

c={7,8,9}

元组、集合转换成列表list

list(b)

[4,5,6]

list(c)

[7,8,9]

列表、集合转换成元组tuple

tuple(a)

(1,2,3)

tuple(c)

(8,9,7) #因为`c`为集合,是无序组合,位置随时会变,转换时位置不固定

列表、元组转换成集合set

set(a)

{1,2,3}

set(b)

(4,5,6)

神奇的加号"+",即并集

列表+列表=列表

a=[1,2,3]

b=[4,5,6]

c=a+b

print(c) #结果为:

[1, 2, 3, 4, 5, 6]

字符串+字符串=字符串

a='abc'

b='xyz'

c=a+b

print(c) #结果为:

abcxyz

元组+元组=元组

a=('a','b','c')

b=(1,2,3)

c=a+b

print(c) #结果为:('a', 'b', 'c', 1, 2, 3)

注意:

--集合是不能加(+)的,因为两个集合里若有同一元素,根据集合的唯一性,会报错

--字典也不能加(+),因为为两个字典若有相同关键字(key),根据字典key的唯一性,也会报错

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值