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

推荐阅读更多精彩内容