拨开荷叶行,寻梦已然成。仙女莲花里,翩翩白鹭情。
IMG-LOGO
主页 文章列表 Python趣味入门8:集合变量-串列、集合、元组、字典

Python趣味入门8:集合变量-串列、集合、元组、字典

白鹭 - 2022-03-07 2114 0 0

1、前言

凛东将至,琼恩·雪诺当上司令官命令山姆威尔去南方,到旧镇学习成为一个学士再回黑城堡,山姆发现如要熟练在图书馆中查询藏书,必须熟悉“串列”、“集合”、“元组”和“字典”4种资料组织形式,

2、串列list

图书馆所有书架上的藏书都是“串列”形式,为了帮助理解串列山姆记得小时候最开心的事情就是逛街,因为老妈会给买最喜欢吃的糖葫芦,竹签可以把许多山楂串成串,串列处理资料与吃糖葫芦其实很相似,:

 


上面两种形式都是“串列”,特点如下:

  • 元素有序,串列中的元素都是有顺序的,可以通过下标来定位,
  • 可以编辑,串列变量中的元素可以被洗掉、添加,

2.1 串列的定义

|元素0|元素1|...

如上所示,串列中的元素是从0开始的,

如下代码使用中括号和逗号分隔来定义串列中的内容,如下定义了各种串列形式,比如:包括1,2,3,4,5五个整数的串列....

1 a=[1,2,3,4,5]   #定义5个元素的串列 
2 b=[] #定义了空的串列 
3 c=['夜王前传',1045,'龙晶使用方法',1056] #定义了书名页数 
4 d=[['夜王前传','龙晶使用方法'],[1045,1056]]   #定了2个串列元素(书名串列、页数串列)的串列 

 

定义完成可以通过如下的方式“取出资料”:

a[0] #表示第0个元素1 
a[1] #表示第1个元素2 
c[1] #表第第1个元素1045 

  

此外,还可以使用负数来倒着取元素,今天山姆的女友吉莉来看他了,提义两个人玩扑克牌,我们定义一幅扑克可以这样定义:


2.2 切片操作

串列在计算机中有如下的主流操作: 切片、洗掉、弹出、添加,

切片就像在书柜(串列)中抽出中间一部分书本(元素),切片操作是这样的,使用冒号分隔前后位置(重要:后面的位置是不被包括的),继续之前定义我们看示例:

a=[1,2,3,4,5] #定义5个元素的串列 
#形成新的串列[2,3] 
a[-4:-2] 
#形成新的串列[2,3] 
a[1:3] 

 

切片可以省略前后的数字,表示开始和结束,切片有好处就是不会产生“溢位错误”,如下的代码在计算时只回传空串列,而不会出错:

#表示从第100位置开始到结束的切片,回传空 
a[100:] 
#下面陈述句会产生溢位错误 
a[100] 

 

2.3 添加洗掉操作

使用append动作来添加元素至队尾、使用del陈述句洗掉元素、remove动作洗掉串列中某一个值(只能一个),如下所示:

串列.append(元素) #添加元素进串列尾
串列.remove(值) #洗掉串列中的值一次
del 元素 #在存储器中洗掉元素
a=[1,2,3,4,5] #定义5个元素的串列 
del a[0] 
print('洗掉a第0个:',a) 
a.append(5) 
print('添加5,a:',a) 
a.remove(5) #只能洗掉一次5 
print('洗掉数值5,a:',a) 

 

运行的结果如下:

洗掉a第0个: [2, 3, 4, 5] 
添加5,a: [2, 3, 4, 5, 5] 
洗掉数值5,a: [2, 3, 4, 5] 

大家可能发现,除了del陈述句比较特殊,其它append和remove动作在运行时都需要把串列变量放在小数点前,现在大家可以理解为这是串列的专门的动作,这种写法表示:呼叫串列class类的方法函式,大家要记往,

del 陈述句是内置命令,不光应用于串列它表示在存储器中洗掉销毁物件,任何变量都可以被“销毁”

2.4 插入弹出操作

弹出pop操作也是串列的专门的“方法”,表示从串列中的某个位置洗掉物件,但是会同时回传这个物件,就好像子弹从弹匣中弹出来一样,同样插入insert操作也可以基于位置(前文remove是基于数值而不是位置)把新元素插入串列,

串列.pop(位置)#不写就默认最后一个
串列.insert(位置,元素) #把元素插入位置当中
a=[2,3,4,5,5] 
b = a.pop(3) 
print('弹出第3个元素,a:',a,',弹出了:',b) 
#第0个位置前插入字符“首” 
a.insert(0,'首') 
print('插入a:',a) 

  

上面的代码运行结果如下图:

弹出第3个元素,a: [2, 3, 4] ,弹出了: 5 
插入a: ['首', 2, 3, 4] 

3、元组tuple

元组可看成是“只读”的串列,它使用成对的圆括号()来定义,其中的元素都有0开始的位置,但只能读取而不能添加和洗掉其中的元素,这就类似于Sam在学院中看到的珍贵特定古籍书柜,柜中的书籍都是固定位置的,只能取阅而不能更新新的书籍进来,也不允许把书籍抽走放在别处或是销毁,

在Sam学院中把书籍位置使用(柜号,行号,列号)的元组来表示,我们看示例:

#Sam学院中把书籍位置使用(柜号,行号,列号)来表示 :
book_a_loc = (1,23,34) 
book_b_loc = (5,10,90) 
print('a书位置:',book_a_loc) 
print('a书行列:',book_a_loc[1:]) 
print('b书行号:',book_b_loc[1]) 
#试洗掉第1个元素会出错 
del book_a_loc[0] 

  

运行后的结果如下:

a书位置: (1, 23, 34) 
a书行列: (23, 34) 
b书行号: 10 
Traceback (most recent call last): File "/....../demo2.py", line 7, in <module>     del book_a_loc[0] TypeError: 'tuple' object doesn't support item deletion 

 

错误信息提示我们,tuple元组型别不支持元素洗掉,
嘿嘿:Sam问道如果把串列加入元组呢,到底可编辑还是不可编辑?
结论是这样的,元组虽然不能编辑,但是其中作为元素的串列却是可以编辑的,

具体交给读者去试试吧!

4、集合set

在学院中有一些正在借阅当中的书籍,通常被学士位乱堆在桌子上,也没有顺序,这种在python中没有顺序的元素集叫“集合”,我们定义空集合时使用set(),而不用{}因为慷训括号表示空的字典,我们定义集合时使用{元素1,....,}来表示,它有如下的特点:

  • 无序
  • 不重复
s = {'男','男','女'} 
print(s) 

在上面的定义当中,我们有重复的男,但是打印出来只有2个值:

{'女', '男'} 

集合型别在数学上有交并差补运算,同样在python当中也有运算子分别是&|-^,具体示例如下图:

n1 = {'',''} 
n2 = {'',''} 
print('',n1&n2,'',n1|n2,'',n1-n2,'',n1^n2) 

 

运行结果如下:

合 {'王'} 并 {'何', '张', '王'} 差 {'张'} 补 {'何', '张'} 

5、字典dict

就像Sam经常使用的字典类书籍,Sam想查词dragonglass(龙晶石)就从dragonglass索引去找内容,python有一种资料结构dict可以实作上述根据索引来查询的功能,dict当中的元素由冒号分隔的两部分组成,前部分当索引的叫关键字key(个人觉得叫钥匙更形象),当内容的叫value(值),

字典内的元素没有数字位置,只能通过关键字来获得内容,

 1 #字典定义分隔符{},后可用回车 
 2 d = {
 3      'dragon':'一种古老的动物',
 4      '龙晶':'使用龙的骨骼形成化石晶体',
 5      }
 6 #查询 龙晶
 7 print('龙晶',d['龙晶']) 
 8 #插入元素 
 9 d['丹尼莉丝'] = '坦格利安家族的风暴降生丹尼莉丝坦格利安一世、不焚者、弥林女王、安达尔人和先民的女王、七国统治者暨全境守护者、草原上的卡丽熙、打碎镣铐者以及龙之母!' 
10 #洗掉dragon 
11 d.pop('dragon') 
12 #打印整个字典 
13 print('d的内容',d)  

 

运行后,结果如下:

龙晶 使用龙的骨骼形成化石晶体 
d的内容 {'龙晶': '使用龙的骨骼形成化石晶体', '丹尼莉丝': '坦格利安家族的风暴降生丹尼莉丝坦格利安一世、不焚者、弥林女王、安达尔人和先民的女王、七国统治者暨全境守护者、草原上的卡丽熙、打碎镣铐者以及龙之母!'} 

通过对字典的熟练运用,SAM找到了龙晶矿的所在地,他决定把这个讯息告诉SNOW,帮助七国打赢夜王之战,关注后续发展哦,

恭喜你又进步了一点,关注并跟随小牛叔,摆正编程入门姿式!

标签:

0 评论

发表评论

您的电子邮件地址不会被公开。 必填的字段已做标记 *