元祖,字典,集合数据类型

Posted dominic-ji

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了元祖,字典,集合数据类型相关的知识,希望对你有一定的参考价值。

1.元组数据类型介绍

  与元祖的定义方式与列表类似,列表为[],而元祖的定义则是()元素与元素中间也是以逗号隔开,元祖是不可变类型(它的元素不能被修改,也不能向其中添加和删除元素)

  1、按索引取值(正向取+反向取):只能取 

    与字符串,列表类似,元祖也可以通过索引取值,但是只能取不能修改 

  2、切片(顾头不顾尾,步长)

    元祖同样支持切片来取其中某一段的方法,这点与字符串,列表的取值没有两样

  3、长度

    想知道元祖里面元素的个数,可以通过len()方法来获取元祖整体长度

  4、成员运算in和not in

    判断某个元素是否在元祖内,同样也是用in和not in来实现

  5、内置方法

    元祖的内置方法特别多————就两个

    index()取出所找对象在元祖里面的对应的索引值

    count()计算某个对象在元祖里面出现的次数

                                ————介绍完毕,方法是不是特别多?

  6、循环

    要想循环取出元祖里面每一个元素,同样可以用到for循环

a = (11,22,33,44)
for i in a:
    print(i) #依次打印出列表里面的元素11 22 33 44

  总结:

    元祖由于其是不可变类型且自身不能增值也不能减值,所以他的储存所占空间是最小的,因为给它配备的方法也少~元祖只用于一些储存的数据不想被修改的情况只能看不能改(想想还是有用武之地的)

 

2.字典数据类型

  1.字典可以说是用处最多的数据类型了,它的特征是每个元素之间都是一一对应的映射关系,储存速度快找寻速度也快,键值对key和value,这里key相当于我们的变量,想去他指向的值只需要取它就可以,字典里的key必须是不可变类型,且一个字典里不能有相同的key(想想也不能,一个东西对应两个值,那你到底是代表哪个值?)而字典里的value可以是任意数据类型

#定义方式
info={name:egon,age:18,sex:male} #本质info=dict({....})
或
info=dict(name=egon,age=18,sex=male)
或
info=dict([[name,egon],(age,18)])
或
{}.fromkeys((name,age,sex),None)

  2、按key存取值:可存可取

  回想一下字符串和列表,我们想去里面的元素直接是通过索引取到对应的值,而字典本身是一个无序的,所以对于它而言没有索引一说,那该怎么精确无误的取值呢?

a = {key:11,key1:22}
print(a[key1]) #输出结果 22

  这里字典的取元素方式起始比起索引更加简单明了,

  3、长度len()

  要想知道字典的总长度(这里长度是键值对的个数,字典的每个元素都由键值对构成)可以用len()

a = {key1:11,key2:22}
print(len(a)) #输出结果为2

  4、成员运算in和not in

  同样想知道某个元素是否在字典里,也可以通过in和not in来判断  

  5、删除

  字典删除元素的方法也很简单,根据对应的key即可删除该键值对,也可以通过key来增加字典的长度

a = {key:11,key:22}
print(a[key]=33) #输出结果为a = {key:33,key:22}

a = {key:11,key:22}
print(a[key2]=33) #输出结果为a = {key:11,key2:33,key1:22}

  6、键keys(),值values(),键值对items()

  字典也有很多内置的方法,这里有三个比较相似的分别是用来取出字典里的所有的key,所有的value和所有的键值对

a = {key:11,key1:22,key2:33}
a = {key:11,key1:22,key2:33}
print(a.keys())#dict_keys([key, key1, key2])
print(a.values())#dict_values([11, 22, 33])
print(a.items())#dict_items([(key, 11), (key1, 22), (key2, 33)])

  7.get()用法:根据key取对应的value值,如果key不存在则返回None或者默认值,key存在的时候默认值不起任何作用

# Dict_eg = {k1:22,kk2:344,k2:fhsdh}
# print(Dict_eg.get(k1))#输出结果22
# print(Dict_eg.get(k22))#输出结果None
# print(Dict_eg.get(k22,666))#输出结果666

  8.pop()用法:删除对应key所在的键值对,并赋值给变量,如果没有key,则返回默认值,有key时默认值不起任何作用

Dict_eg = {k1: 22, kk2: 344, k2: fhsdh}
# v = Dict_eg.pop(k2)
# print(Dict_eg)#输出结果{k1: 22, kk2: 344}
# print(v)#输出结果fhsdh

  9.popitem()用法:随机删除一对键值对

 Dict_eg = {k1: 22, kk2: 344, k2: fhsdh}
# v = Dict_eg.popitem()
# print(Dict_eg,v)#输出结果  {k1: 22, kk2: 344}   (k2, fhsdh)

  10.update()用法:批量添加并可修改值

Dict_eg = {k1: 22, kk2: 344, k2: fhsdh}
# Dict_eg.update({k3:345,k1:666})
# print(Dict_eg)#输出结果 {k1: 666, kk2: 344, k2: fhsdh, k3: 345}

  11.fromkeys()用法:创建字典

val = dict.fromkeys([k1,k2,k3],[])
# val[k1].append(666)
# val[k1]=[1,2,3]
# print(val)#输出结果{k1: [1, 2, 3], k2: [666], k3: [666]}
#fromkeys创建出来的字典key都指向同一个value地址,所以进行append()操作时,三个k对应的v都在变,而再次对其中一个进行赋值时
# 相当于让其指向另一个地址

  12.setdefault的功能

1:key存在,则不赋值,key不存在则设置默认值
2:key存在,返回的是key对应的已有的值,key不存在,返回的则是要设置的默认值
d={}
print(d.setdefault(a,1)) #返回1

d={a:2222}
print(d.setdefault(a,1)) #返回2222

3.集合数据类型

  集合的定义方式与字典很相似,都是以{}括起来的,不同的地方在于,集合的大括号内元素与元素之间是以逗号分隔,但是没有键值对的形式,且集合内的元素是无序且都是不重复的,集合自身带有去重的方法,集合一般有两个用法第一个是将不同的值存放到一起,不同的集合间用来做关系运算,无需纠结于集合中单个值,第二个就是进行去重操作

a = {11,22,33} #等价于a = set(11,22,33)

  这里想到一个小的知识点就是在创建为空的每个数据类型时,该怎么创建呢?

b = ‘‘
c = []
d = ()
e = {} #注意到空字典和空集合的不同方式了吗?如果直接大括号,系统默认是字典形式
f = set()

  1.求两个集合之间的公共部分(交集)

a = {egon,alex,wusir,yxx}
b = {sanjiang,zifan,egon,alex}
print(a&b) #{egon,alex}
#或者用集合自带的方法print(a.intersection(b))#{egon‘,alex‘}

  2.求两个集合所有的(并集)

a = {egon,alex,wusir,yxx}
b = {sanjiang,zifan,egon,alex}
print(a.union(b))#{egon, yxx, wusir, sanjiang, zifan, alex}
print(a|b)#{egon, yxx, wusir, sanjiang, zifan, alex}

  3.求两个集合之间的差集

a = {egon,alex,wusir,yxx}
b = {sanjiang,zifan,egon,alex}
print(a-b){wusir, yxx}
print(a.difference(b)){wusir, yxx}
print(b-a){zifan, sanjiang}
print(b.difference(a)){zifan, sanjiang}

  4.求两个集合之间的对称差集

a = {egon,alex,wusir,yxx}
b = {sanjiang,zifan,egon,alex}
print(a^b)#{wusir, yxx, zifan, sanjiang}
print(a.symmetric_difference(b))#{wusir, yxx, zifan, sanjiang}

 补充知识点 enumerate用法:

t = (44,55)
l = [11,22,33]
str= 哈喽
dic = {key:1,key2:2}
s = {1,2,3}
for i in enumerate(l):
    print(i,end= )#(0, 11) (1, 22) (2, 33)
for tu in enumerate(t):
    print(tu,end= )#(0, 44) (1, 55)
for se in enumerate(str):
    print(se,end= )#(0, ) (1, )
for d in enumerate(dic):
    print(d,end= )#(0, key) (1, key2)
for see in enumerate(s):
    print(see,end= )#(0, 1) (1, 2) (2, 3)
#不难看出,enumerate配合for循环可以去除每个数据类型里面的每个元素并且自动标号对应的索引值

 

 

 

 
 

 

 
 
 

 

 






#6、循环

     

 






 

以上是关于元祖,字典,集合数据类型的主要内容,如果未能解决你的问题,请参考以下文章

基本数据类型(字符串_数字_列表_元祖_字典_集合)

基本数据类型:数字字符串列表元祖字典集合

python的数据类型字符串列表字典元祖集合编码补充等

元祖hash了解字典集合类型

python的列表,元祖及字典

python全栈开发-列表元祖字典集合-7.13