05Python列表元祖字典集合
xc_深度好文:字
10分钟阅读数据结构基本上就是——它们是可以处理一些数据的结构。或者说,它们是用来存储一组相关数据的。在Python中有四种内建的数据结构——列表、元组和字典,集合。我们将会学习如何使用它们,以及它们如何使编程变得简单
一、列表list
是处理一组有序项目的数据结构,即你可以在一个列表中存储一个序列的项目。假想你有一个购物列表,上面记载着你要买的东西,你就容易理解列表了。只不过在你的购物表上,可能每样东西都独自占有一行,
而在Python中,你在每个项目之间用逗号分割。列表中的项目应该包括在方括号中,这样Python就知道你是在指明一个列表。
一旦你创建了一个列表,你可以添加、删除或是搜索列表中的项目。由于你可以增加或删除项目,我们说列表是可变的数据类型,即这种类型是可以被改变的
#购物清单shoplist=[苹果,芒果,胡萝卜,香蕉]
基本操作
print(我有,len(shoplist),个商品在我的购物清单.)print(它们是:),#提示foriteminshoplist:print(item)print(我还买了大米.)shoplist.append(大米)print(现在我的购物清单是,shoplist)#[苹果,芒果,胡萝卜,香蕉,大米]
基本操作——增
append追加li=[苹果,芒果,胡萝卜,香蕉]li.append(大米)print(li)#[苹果,芒果,胡萝卜,香蕉,大米]li.append(1)#[苹果,芒果,胡萝卜,香蕉,大米,1]print(li.append(hello))#None:无返回值,li.append()只是一个方法、动作print(li)#[苹果,芒果,胡萝卜,香蕉,大米,1,hello]insert插入
li=[苹果,芒果,胡萝卜,香蕉]li.insert(,草莓)print(li)#[苹果,芒果,胡萝卜,草莓,香蕉]extend追加到末尾
li=[苹果,芒果,胡萝卜,香蕉]li.extend(cc)print(li)#[苹果,芒果,胡萝卜,香蕉,c,c]li.extend([1,,])print(li)#[苹果,芒果,胡萝卜,香蕉,c,c,1]li.extend(1)#报错:数字不能迭代print(li)#TypeError:intobjectisnotiterable应用实例:
连续输入员工姓名,输入Q/q退出并打印列表
li=[]whileTrue:username=input("请输入要添加的员工姓名:")ifusername.strip().upper()==Q:bakli.append(username)print(li)print(li)运行结果:
列表——删move:按照元素删除
li=[苹果,芒果,胡萝卜,香蕉]li.move(芒果)print(li)#[苹果,胡萝卜,香蕉]pop:按照索引删除——有返回值
li=[苹果,芒果,胡萝卜,香蕉]name=li.pop(1)#有返回值print(name,li)#芒果[苹果,胡萝卜,香蕉]name=li.pop()#不写索引则默认删除最后一个print(name,li)#香蕉[苹果,胡萝卜]clear:清空
li=[苹果,芒果,胡萝卜,香蕉]li.clear()print(li)#[]del:删除
li=[苹果,芒果,胡萝卜,香蕉]delli[:]print(li)#[苹果,芒果]delli#删除之后,已经不存在,打印报错print(li)#NameError:nameliisnotdefined
循环删除
li=[11,,,44,55]foriinrange(len(li)):print(i)delli[0]print(li)
列表——改li[索引]=‘被修改的内容’
li=[苹果,芒果,胡萝卜,香蕉]li[0]=火龙果#将索引为0的位置改为‘火龙果’print(li)#[火龙果,芒果,胡萝卜,香蕉]li[切片]=‘被修改的内容’(迭代式:分成最小的元素,一个一个添加)
li=[苹果,芒果,胡萝卜,香蕉]li[0:]=abcd#将索引0-替换为abcd,切片之后迭代处理print(li)//[a,b,c,d,胡萝卜,香蕉]li[0:]=[我,喜欢,吃,水果]print(li)//[我,喜欢,吃,水果,d,胡萝卜,香蕉]列表——查从头到尾:for循环
li=[苹果,芒果,胡萝卜,香蕉]foriinli:print(i)某一个:索引
li=[苹果,芒果,胡萝卜,香蕉]print(li[1])#芒果一段:切片
li=[苹果,芒果,胡萝卜,香蕉]print(li[0:])#[苹果,芒果,胡萝卜]列表——嵌套li=[苹果,芒果,胡萝卜,[a,b,c],香蕉]print(li[][1])#萝li[][0].upper()#把列表中第四个元素列表的第一个元素变为大写print(li)#[苹果,芒果,胡萝卜,[a,b,c],香蕉]列表——循环打印#索引默认从零开始
li=[alex,taibai,wusir,egon]foriinli:print(li.index(i),i)#指定索引从开始
forindex,iinenumerate(li,):print(index,i) 运行结果:其他常用操作split:字符串转换成列表str---list
s=xcsd_cdc_eht_木木print(s.split(_))//[xcsd,cdc,eht,木木]s1=xcsdcdceht曾木木print(s1.split())//[xc,sdc,dc,eht曾,木木]join:列表转换成字符串list---str
join(可迭代对象iterable)split
可迭代对象iterable:list,str,元祖
li=[xcsd,cdc,eht,木木]s=.join(li)print(s)#xcsdcdceht木木s1=_.join(li)print(s1)#xcsd_cdc_eht_木木range:顾头不顾尾——相当于有序的数字列表(可以反向,加步长)
foriinrange(,6):print(i)foriinrange():#从0开始,0可省略应用实例:
循环打印,列表里遇到列表也需要循环打印
li=[1,,,5,alex,[,,4,5,taibai],afds]foriinli:iftype(i)==list:fornini:print(n)else:print(i)运行结果:
二、元祖元组和列表十分类似,只不过元组和字符串一样是不可变的即你不能修改元组。元组通过圆括号中用逗号分割的项目定义。
元组通常用在使语句或用户定义的函数能够安全地采用一组值的时候,即被使用的元组的值不会改变
tu1=(1)tu=(1,)print(tu1,type(tu1))#1classintprint(tu,type(tu))#(1,)classtupletu=([1])tu4=([1],)print(tu,type(tu))#[1]classlistprint(tu4,type(tu4))#([1],)classtuple元组的基本操作tu=(1,,,alex,egon)print(tu[])#print(tu[0:])#(1,)foriintu:print(i)#循环打印元祖字典字典类似于你通过联系人名字查找地址和联系人详细情况的地址簿,即,我们把键(名字)和值(详细情况)联系在一起。注意,键必须是唯一的,就像如果有两个人恰巧同名的话,你无法找到正确的信息。
注意,你只能使用不可变的对象(比如字符串)来作为字典的键,但是你可以把不可变或可变的对象作为字典的值。
基本说来就是,你应该只使用简单的对象作为键。
键值对在字典中以这样的方式标记:d={key1:value1,key:value}。
注意它们的键/值对用冒号分割,而各个对用逗号分割,所有这些都包括在花括号中
dictkey(键)必须是不可变数据类型,可哈希value(值)任意数据类型
dict优点:二分查找去查询 存储大量的关系型数据特点:=.5版本无序,.6以后都是有序
1.字典—增dic[键]=值
dic1={age:18,name:xc,sex:female}dic1[height]=print(dic1)#没有键值对,增加#{age:18,name:xc,sex:female,height:}dic1[age]=1print(dic1)#有键值对,则修改#{age:1,name:xc,sex:female,height:}setdefault设置默认
#dic1={age:18,name:xc,sex:female}dic1.setdefault(weight,10)print(dic1)#没有键值对,增加#{age:18,name:xc,sex:female,weight:10}dic1.setdefault(name,aa)print(dic1)#有键值对,不做任何操作#{age:18,name:xc,sex:female,weight:10}.字典——删删除优先使用pop(有返回值,要删除的内容不存在时不报错),而不是del
pop删除
#dic1={age:18,name:xc,sex:female}print(dic1.pop(age))#有age直接删除---有返回值,按键删除print(dic1)#18{name:xc,sex:female}print(dic1.pop(erge,没有此键/None))#没有erge----可设置返回值:没有此键/Noneprint(dic1)#没有此键/None{name:xc,sex:female}popitem随机删除
dic1={age:18,name:xc,sex:female}print(dic1.popitem())#(sex,female)#随机删除:有返回值-----返回元祖:删除的键值clear清空
dic1={age:18,name:xc,sex:female}dic1.clear()#清空字典print(dic1)#{}del删除
dic1={age:18,name:xc,sex:female}deldic1[name]#有,则删除#deldic1[name1]#没有,则报错print(dic1)#{age:18,sex:female}.字典——改updatedic={age:18,name:xc,sex:female}dic={name:alex,weight:}dic.update(dic)#有则更新覆盖,没有则增加print(dic)#{age:18,name:xc,sex:female}print(dic)#{name:xc,weight:,age:18,sex:female}4.字典——查keys,values,itemsdic1={age:18,name:xc,sex:female}print(dic1.keys(),type(dic1.keys()))#键dict_keys([age,name,sex])classdict_keysprint(dic1.values())#值dict_values([18,xc,female])print(dic1.items())#元祖dict_items([(age,18),(name,xc),(sex,female)])得到键值,首选get
print(dic1[name])#有则打印#print(dic1[name1])#没有则报错print(dic1.get(name))#有name直接输出---有返回值print(dic1.get(name1,没有此键))#没有name1----可设置返回值:没有此键/None循环输出
foriindic1:print(i)#循环打印键(默认为键)foriindic1.keys():print(i)#循环打印键foriindic1.values():print(i)#循环打印值foriindic1.items():print(i)#循环打印键值对fork,vindic1.items():print(k,v)#打印键和值5.字典的嵌套dic={name:[alex,wusir,xinchen],py9:{time:11,study_fee:,addr:CBD,},age:1}dic[age]=56#找到age,再更新为56print(dic)dic[name].append(rt)#找到name,在添加名字print(dic)dic[name][1]=dic[name][1].upper()#找到name,再把wusir变为大写print(dic)dic[py9][female]=6#找到元祖,增加键值对female:6print(dic)应用实例:
#输入一串字符,遇到字母,转换为‘_’,并打印输出
info=input(请输入:)foriininfo:ifi.isalpha():info=info.place(i,_)print(info)运行结果:
四、集合集合类似于列表,但每个元素都必须是独一无二且不可变的:它是无序的
print(set1)#{1,,}set={1,,,[,],{name:xc}}#列表是可变的(不可哈希),所以出错print(set)#TypeError:unhashabletype:list基本操作1.集合——增addset1={alex,wusir,ritian,egon,barry}#(1)add#因为集合是无序的,所以每次运行结果不一定一样,增加的位置也不一定一样set1.add(nvshen)#{ritian,nvshen,egon,wusir,alex,barry}print(set1)update
set1.update(xc)#迭代添加,依然是无序的print(set1)#{egon,x,wusir,nvshen,c,alex,ritian,barry}.集合——删set1={alex,wusir,ritian,egon,barry}pop--随机删除
print(set1.pop())#egon:有返回值,返回本次删除的内容print(set1)#{barry,alex,wusir,ritian}move——指定元素删除
set1.move(alex)print(set1)#{egon,wusir,barry,ritian}clear——清空
set1.clear()print(set1)#空集合:set()del
delset1#删除之后集合不存在,报错print(set1)#NameError:nameset1isnotdefined
.集合不能改集合是无序;
集合中的元素是不可变数据类型
4.集合——查set1={alex,wusir,ritian,egon,barry}foriinset1:print(i)运行结果:
5.集合之间的操作set1={1,,,4,5}set={4,5,6,7,8}交集
print(set1set)#(1){4,5}print(set1.intersection(set))#(){4,5}并集
print(set1set)#(1){1,,,4,5,6,7,8}print(set1.union(set))#(){1,,,4,5,6,7,8}
反交集--除交集以外的其他元素
print(set1^set)#(1){1,,,6,7,8}print(set1.symmetric_diffence(set))#(){1,,,6,7,8}差集--前者独有的
print(set1-set)#(1){1,,}print(set1.diffence(set))#(){1,,}print(set-set1)#(1){8,6,7}print(set.diffence(set1))#(){8,6,7}子集与超集
set={1,,,4,5}set4={1,,,4,5,6,7,8}print(------set是set4的子集------)print(setset4)#Trueprint(set.issubset(set4))#Trueprint(------set4是set的超集------)print(set4set)#Trueprint(set4.issuperset(set))#True五、公共方法排序正向排序:sort()
li=[1,5,4,,6,7,]li.sort()print(li)#[1,,,4,5,6,7]倒序排序:li.sort(verse=True)
li=[1,5,4,,6,7,]li.sort(verse=True)print(li)#[7,6,5,4,,,1]反转:li.verse()
li=[1,5,4,,6,7,]li.verse()print(li)#[,7,6,,4,5,1]补充:
字符串列表排序——根据字符串的第一个字符对应的ASCII码排序
li=[ojhy,asa,cvd,hdk]li.sort()print(li)#[asa,cvd,hdk,ojhy]count()数元素出现的次数li=[xcsd,cdc,木木,[1,5,],eht,木木]num=li.count(木木)print(num)#:木木出现次len()计算列表的长度li=[xcsd,cdc,木木,[1,5,],eht,木木]l=len(li)print(l)#6:列表长度为6li.index(元素)查看索引li=[xcsd,cdc,辛辰,[1,5,],eht,辛辰]print(li.index(eht))#4:eht的索引为4元祖六.区别与异同
列表list元组tuple集合set字典dict可否读写读写只读读写读写可否重复是是否是存储方式值值键
(不能重复)
键值对
(键不能重复)
是否有序有序有序无序自动正序初始化[1,a](a,1)set([1,])或{1,}
{a:1,b:}添加append只读addd[key]=value读元素l[:]t[0]无d[a]《python小白入门系列教程》01-Python安装教程与特色介绍0-python你应该知道这些0python—9个基础常识0python—15种字符串骚操作程序员单词库
转载请注明:http://www.zhaigou365.net/xttz/12343.html