带你走进机器人时代 Discover点击上面蓝色文字,关注我们 Python序列除了列表外,还有元组、字典、集合等序列结构,他们各有不同的功能和应用,今天我们来看看。 元组相当于是不可变的列表,一旦创建就不能修改。o(3,abc,〔1,2,3〕)print(o〔1〕)o〔1〕999print(o)运行结果:abcTraceback(mostrecentcalllast):FileF:Python程序元组,字典,集合示例。py,line9,inmoduleo〔1〕999TypeError:tupleobjectdoesnotsupportitemassignment 元组创建的方法一:创建元组,如果只有一个元素,需要加上逗号p(3,)q(3)o(3,abc,〔1,2,3〕)print(type(p))print(type(q))print(type(o))运行结果:classtupleclassintclasstuple 元组创建的方法二: 使用tuple()函数创建或转换为元组:使用tuple()函数创建元组ptuple(ABC)print(type(p))qtuple(〔1,2,3,4,5〕)print(type(q),,q)otuple(range(1,5))print(type(q),,o)运行结果:classtupleclasstuple(1,2,3,4,5)classtuple(1,2,3,4) 访问元组的方法和访问列表的方法大同小异,可以通过索引号、切片的方式访问。 如果希望修改元组的元素,只能通过创建一个新的元组的方式来实现。所以,可以把元组理解为只读版的列表。 通过下面的代码,我们可以看出元组和列表的区别:元组和列表的区别测试内存占用p〔〕print(列表的存储空间:,p。sizeof())q()print(元组的存储空间:,q。sizeof())运行结果:列表的存储空间:40元组的存储空间:24 字典:是一种无序的、可变的序列,它的元素以键值对(keyvalue)的形式存储。如:{1:abc,2:efg}这种形式,1是键,abc是键值。 它主要有这些特征:键是唯一的,不能重复;键不可变,只能使用数字、字符串或者元组,不能使用列表;字典是可变的,可以任意嵌套;字典是任意数据的无序集合;通过键来读取数据,而不是通过索引。 我们来看看下面几种创建字典的方式:字典的创建p{1:abc,2:efg}print(p,type(p))mdict。fromkeys(〔张三,李世,王五〕,60)print(m,type(m))ndict(a手机,b电脑)print(n,type(n))d(〔two,2〕,〔one,1〕,〔three,3〕)adict(d)print(a,type(a))运行结果:{1:abc,2:efg}classdict{张三:60,李世:60,王五:60}classdict{a:手机,b:电脑}classdict{two:2,one:1,three:3}classdict 访问字典的方式有两种:访问字典p{two:99999,one:88888,three:3}print(p〔one〕)print(p。get(one))运行结果:8888888888 通过以下代码,我们看看对字典的增删改查的操作:访问字典p{two:99999,one:88888,three:3}增加一堆键及键值p〔three〕77777print(p)修改键及键值p〔three〕66666print(p)删除键及键值delp〔three〕print(p)判断键是否存在print(twoinp)print(fourinp)运行结果:{two:99999,one:88888,three:77777}{two:99999,one:88888,three:66666}{two:99999,one:88888}TrueFalse 获取字典中特定的数据,我们还可以使用下列方法: keys()方法用于返回字典中的所有键(key); values()方法用于返回字典中所有键对应的值(value); items()用于返回字典中所有的键值对(keyvalue);p{two:99999,one:88888,three:3}print(p。keys())取得键print(p。values())取得键值print(p。items())取得键值对运行结果:dictkeys(〔two,one,three〕)dictvalues(〔99999,88888,3〕)dictitems(〔(two,99999),(one,88888),(three,3)〕)注意返回值的类型 如果要操作这些返回值,需要转换为列表:p{two:99999,one:88888,three:3}print(p。keys())取得键注意返回值的类型slist(p。keys())print(s,type(s))运行结果:dictkeys(〔two,one,three〕)〔two,one,three〕classlist 我们也可以使用循环来遍历字典:p{two:99999,one:88888,three:3}fori,jinp。items():print(i,j)运行结果:two99999one88888three3 copy()方法:copy()方法a{one:1,two:2,three:〔1,2,3〕}ba。copy()向a中添加新键值对,由于b已经提前将a所有键值对都深拷贝过来因此a添加新键值对,不会影响b。a〔four〕100print(a)print(b)由于b和a共享〔1,2,3〕(浅拷贝)因此移除a中列表中的元素,也会影响b。a〔three〕。remove(1)print(a)print(b)运行结果:{one:1,two:2,three:〔1,2,3〕,four:100}{one:1,two:2,three:〔1,2,3〕}{one:1,two:2,three:〔2,3〕,four:100}{one:1,two:2,three:〔2,3〕} update()方法:update方法a{one:1,two:2,three:3}a。update({one:9,four:12})print(a)运行结果:{one:9,two:2,three:3,four:12} pop()和popitem()方法:删除键值对pop()和popitem()方法删除键值对a{数学:100,语文:99,英语:80}print(a)a。pop(语文)print(a)a。popitem()print(a)运行结果:{数学:100,语文:99,英语:80}{数学:100,英语:80}{数学:100} popitem()总是弹出底层中的最后一个keyvalue,这和列表的pop()方法类似。 setdefault()方法用来返回某个key对应的如果该key存在,那么直接返回该key对应的 如果该key不存在,那么先为该key设置默认值,然后再返回该key对应的默认值。 字典可以用来格式化字符串,我们来看看它的应用:使用字典格式化字符串字符串模板中使用keyt我们国家(a1)s,有(a2)。0f年的历史,拥有人口:(a3)sc{a1:自古以来,a2:5000,a3:14亿}使用字典为字符串模板中的key传入值print(tc)运行结果:我们国家自古以来,有5000年的历史,拥有人口:14亿 集合:与数学中的集合概念一样,用来保存不重复的元素,所有的元素都是唯一的。 同一集合中,只能存储不可变的数据类型,包括整形、浮点型、字符串、元组,无法存储列表、字典、集合这些可变的数据类型。 可以用{}和set()方法来创建集合,它最实用的特点就是用来过滤重复的数据。一般来说,由于集合是无序的,所有我们在访问集合的时候采用循环的方式来读取数据。 通过代码,我们可以看到集合操作的一些方法:集合的操作p{1,2,3,4,6,7,7,8,9,9,0}集合会自动删除重复的元素print(p,type(p))向集合中添加元素p。add(ABC)print(p,type(p))从集合中删除元素p。remove(9)print(p,type(p))使用discard()删除元素,失败不会报错p。discard(ABD)print(p,type(p))q{3,4,5,999,ABC,CD}集合的交集运算print(pq)集合的并集运算print(pq)集合的差集运算取一个集合中另一集合没有的元素print(pq)取集合A和B中不属于AB的元素print(pq)运行结果:{0,1,2,3,4,6,7,8,9}classset{0,1,2,3,4,ABC,6,7,8,9}classset{0,1,2,3,4,ABC,6,7,8}classset{0,1,2,3,4,ABC,6,7,8}classset{ABC,3,4}{0,1,2,3,4,ABC,6,7,8,5,999,CD}{0,1,2,6,7,8}{0,1,5,2,6,7,8,CD,999} 下面总结集合的一些方法: 方法名 语法格式 功能 add() set1。add() 向set1集合中添加数字、字符串、元组或者布尔类型 clear() set1。clear() 清空set1集合中所有元素 copy() set2set1。copy() 拷贝set1集合给set2 difference() set3set1。difference(set2) 将set1中有而set2没有的元素给set3 differenceupdate() set1。differenceupdate(set2) 从set1中删除与set2相同的元素 discard() set1。discard(elem) 删除set1中的elem元素 intersection() set3set1。intersection(set2) 取set1和set2的交集给set3 intersectionupdate() set1。intersectionupdate(set2) 取set1和set2的交集,并更新给set1 isdisjoint() set1。isdisjoint(set2) 判断set1和set2是否没有交集,有交集返回F没有交集返回True issubset() set1。issubset(set2) 判断set1是否是set2的子集 issuperset() set1。issuperset(set2) 判断set2是否是set1的子集 pop() aset1。pop() 取set1中一个元素,并赋值给a remove() set1。remove(elem) 移除set1中的elem元素 symmetricdifference() set3set1。symmetricdifference(set2) 取set1和set2中互不相同的元素,给set3 symmetricdifferenceupdate() set1。symmetricdifferenceupdate(set2) 取set1和set2中互不相同的元素,并更新给set1 union() set3set1。union(set2) 取set1和set2的并集,赋给set3 update() set1。update(elem) 添加列表或集合中的元素到set1 在Python中还有一种frozenset集合是不可变序列,程序不能改变序列中的元素。frozenset集合t{张三,李四,王五}ffrozenset(〔男,女〕)b{1班,2班}向set集合中添加t。add(f)print(t,t)运行结果:t{frozenset({男,女}),李四,王五,张三} 字典和集合是进行过性能高度优化的数据结构,特别是对于查找、添加和删除操作。 我们通过以下例子可以发现集合与列表在实际应用中的效率对比:初始化1万个产品的名称和价格分别用集合和列表来统计产品的价格数量计算耗时统计时间需要用到time模块中的函数importtimedeffind11(pd):plist〔〕for,priceinpd:Aifpricenotinplist:Bplist。append(price)returnlen(plist)id〔xforxinrange(0,10000)〕price〔xforxinrange(20000,30000)〕pdlist(zip(id,price))计算列表版本的时间开始时间time。perfcounter()find11(pd)结束时间time。perfcounter()print(列表总共用时:{}。format(结束时间开始时间))使用集合完成同样的工作deffinds(pd):usetset()for,priceinpd:uset。add(price)returnlen(uset)计算集合版本的时间开始时间1time。perfcounter()finds(pd)结束时间1time。perfcounter()print(集合总共用时:{}。format(结束时间1开始时间1))运行结果:列表总共用时:0。47609080000074755集合总共用时:0。0010524000008445 可见,Python序列的类型,各有各的用处 坚持学习,每天都能进步一点点!! 往期回顾:来来来,送你一个金牌销售机器人,7X24小时不休,不要工资免费用!RPA技术在旅行社销售业务中如何凤凰涅槃??【工资翻三倍】系列:一招搞定九宫图片切割机器人,让你的朋友圈更加炫酷! 本文引用和摘录相关内容,请联系侵删。 END 最后,文章有帮助到你的话【点赞在看】 激励我们分享更多的干货!