元组、字典、集合基本操作

元组:元组就是一个不可变的列表

  1.用途:当我们需要记录多个同种属性的值,并且只有读的需求时,应该用元组   

  2.定义方法:在()内用逗号分隔开多个任意类型的元素

t=('tulipa',)#注意:当元组内只有一个元素时,必须加逗
t=tuple(('tulipa',))
t=('tulipa',)
print(t,type(t))
print(t[0])('tulipa',) 
#<class 'tuple'>
#—>tulipa
#数据类型转换:
t=tuple('hello')
print(t,type(t))
#('h', 'e', 'l', 'l', 'o') <class 'tuple'>

  3.常用操作+内置的方法   

  3.1优先掌握的操作:  

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

t=('a','b','c')
t[0]='A'
#报错不能改值

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

t=('a','b','c')
print(t[0:2])
#('a', 'b')

    3.长度

t=tuple('hello')
print(len(t))
#5

    4.成员运算in和not in

t=('a','b','c',(1,2,3))
print((1,2,3) in t)
#True

    5.循环

t=('a','b','c',(1,2,3))
for item in t:
        print(item)
#a
#b
#c
#(1, 2, 3)    

  3.2需要掌握的操作

t=('a','b','b','c',(1,2,3))
print(t.count('b'))
print(t.index('b',2,4))
#2
#2

总结

  存多个值

  有序

  不可变(1、可变:值变,id不变。可变==不可hash 2、不可变:值变,id就变。不可变==可hash)

t=(1,'a',['m','n'])
print(id(t[0]),id(t[1]),id(t[2]))
t[2][0]='M'
print(t)
print(id(t[0]),id(t[1]),id(t[2]))
#1675259360 2194535694664 2194536741640
#(1, 'a', ['M', 'n'])
#1675259360 2194535694664 2194536741640

字典类型

  1.用途:记录多个不同属性的值  

  2.定义方式:在{}内用逗号分隔开多个元素,每一个元素都是key;value的形式,其中value可以是任意类型,而key必须是不可变类型(通常应该是str类型)

  3.常用操作+内置的方法   

  3.1优先掌握的操作:

     1.按key存取值:可存可取

dic={'name': 'egon', 'age': 18, 'gender': 'male'}
print(dic['name'])
print(id(dic)
)dic['name']='EGON'
print(dic,id(dic))
dic['height']=1.81 # 如果key不存在则新增一组key:value
print(dic)​
#egon
#2933877980904
#{'name': 'EGON', 'age': 18, 'gender': 'male'} 2933877980904
#{'name': 'EGON', 'age': 18, 'gender': 'male', 'height': 1.81}​

    2.长度

dic={'name': 'egon', 'age': 18, 'gender': 'male'}
print(len(dic))
#3

    3.成员运算in和not#判断是字典的key

dic={'name': 'egon', 'age': 18, 'gender': 'male'}
print('name' in dic)
#True

    4.删除

dic={'name': 'egon', 'age': 18, 'gender': 'male'}
del dic['name']
print(dic)
#{'age': 18, 'gender': 'male'}
t=dic.popitem()
print(t,type(t))
#('gender', 'male') <class 'tuple'>
v=dic.pop('name')
print(v)
#报错

    5.键key(),值values(),键值对items()

dic={'name': 'egon', 'age': 18, 'gender': 'male'}

# Python2解释器

# >>> dic={'name': 'egon', 'age': 18, 'gender': 'male'}

# >>> dic.keys()

# ['gender', 'age', 'name']

# >>> dic.values()

# ['male', 18, 'egon']

# >>> dic.items()

# [('gender', 'male'), ('age', 18), ('name', 'egon')]

keys=dic.keys()
vals=dic.values()
items=dic.items()

print(keys)
print(vals)
print(items)

print(list(keys))
print(list(vals))
print(list(items))

#dict_keys(['name', 'age', 'gender'])
#dict_values(['egon', 18, 'male'])
#dict_items([('name', 'egon'), ('age', 18), ('gender', 'male')])
#['name', 'age', 'gender']
#['egon', 18, 'male']
#[('name', 'egon'), ('age', 18), ('gender', 'male')]

    6.循环

dic={'name': 'egon', 'age': 18, 'gender': 'male'}
for k in dic.keys():
        print(k)
#name
#age
#gender
for k in dic:
        print(k)
#name
#age
#gender
for v in dic.values():
        print(v)
#egon
#18
#male
for k,v in dic.items():
        print(k,v)
#name egon
#age 18
#gender male

    7.get取值

dic={'name': 'egon', 'age': 18, 'gender': 'male'}
if 'xxx' in dic:
  print(dic['xxx'])
else:
  print(None)

v=dic.get('xxx')
print(v)
#None
#None

  3.2需要掌握的操作

dic.fromkeys()
li=['name','age','gender']
dic={}
for k in li:
        dic[k]=None
        print(dic)
#{'name': None, 'age': None, 'gender': None}


dic={}.fromkeys(li,None)
print(dic)
#{'name': None, 'age': None, 'gender': None}


dic={'k1':1}.fromkeys(li,None)
print(dic)
#{'name': None, 'age': None, 'gender': None}


dic={}.fromkeys('hello',)
print(dic)
#{'h': None, 'e': None, 'l': None, 'o': None}


keys=['name','age','gender']
vals=['egon',18,'male']
dic={}.fromkeys(keys,vals)
print(dic)
#{'name': ['egon', 18, 'male'], 'age': ['egon', 18, 'male'], 'gender': ['egon', 18, 'male']}


keys=['name','age','gender']
vals=['egon',18,'male']
dic={}
for i in range(len(keys)):
        k=keys[i]
        v=vals[i]
        dic[k]=v

print(dic)
#{'name': 'egon', 'age': 18, 'gender': 'male'}


dic={}
dic.update()
old_dic={'name': 'egon', 'age': 18, 'gender': 'male'}
new_dic={'x':1,'name':'EGON'}
old_dic.update(new_dic)
print(old_dic)
#{'name': 'EGON', 'age': 18, 'gender': 'male', 'x': 1}


dic.setdefault(k,v)#:执行完毕后是为了保证字典中必须有这么一个k
dic={'name': 'egon', 'age': 18, 'gender': 'male'}
v=dic.setdefault('height',1.81) # 字典中没有'height'这个键,则新增
print(dic)
#{'name': 'egon', 'age': 18, 'gender': 'male', 'height': 1.81}
print(v)
#1.81


v=dic.setdefault('name','EGON') # 字典中有'name'这个键,不修改字典
# print(dic)
print(v)
#egon


#setdefault的原理分析:
k='name'
v='EGON'
if k not in dic:
        dic[k]=v
print(dic)
#{'name': 'egon', 'age': 18, 'gender': 'male'}

总结

  存多个值

   无序

  可变(1、可变:值变,id不变。可变==不可hash 2、不可变:值变,id就变。不可变==可hash)

集合类型

一:引入

pythons=['李铁蛋','张全蛋','王铜蛋','赵银蛋','oldboy','艾利克斯']
linuxs=['kevin','egon','tank','艾利克斯','王铜蛋']
​l=[]​
for item in pythons:    
        if item in linuxs:    
        l.append(item)​print(l)
#['王铜蛋', '艾利克斯']    

二:集合set   

  1.用途   

    1.1做关系运算   

    1.2去重   

  2.定义方式:在{}内用逗号分隔开多个元素,多个元素必须满足以下条件   

    2.1每一个元素必须是不可变类型   

    2.2集合内元素不能重复   

    2.3集合无序

s={1,1.1,'aaa',1,1,1,1,1,1,1,1,1,}
print(s,type(s))
#{1, 'aaa', 1.1} <class 'set'>

注意点:

d={} 
# 默认定义为字典
print(type(d))
s=set()
print(s,type(s))
#<class 'dict'>
#set() <class 'set'>
#数据类型转换:s=set('hello')
print(s)#{'h', 'e', 'o', 'l'}

  3.常用操作+内置的方法   

    3.1关系运算

pythons={'李铁蛋','张全蛋','王铜蛋','赵银蛋','oldboy','艾利克斯'}
linuxs={'kevin','egon','tank','艾利克斯','王铜蛋'}


# 求即报名python课时又报名linux课程的学员:交集
#求所有的学员姓名:并集
res=pythons | linuxs
print(res)
#{'张全蛋', 'tank', '李铁蛋', 'oldboy', '赵银蛋', 'egon', '艾利克斯', 'kevin', '王铜蛋'}
res1=pythons.union(linuxs)
print(res1)
#{'张全蛋', 'tank', '李铁蛋', 'oldboy', '赵银蛋', 'egon', '艾利克斯', 'kevin', '王铜蛋'}


#求只报名python课程的学员:差集
res=pythons - linuxs
print(res)
#{'赵银蛋', '李铁蛋', 'oldboy', '张全蛋'}
print(pythons.difference(linuxs))
#{'赵银蛋', '李铁蛋', 'oldboy', '张全蛋'}
res=linuxs - pythons
print(res)
#{'tank', 'egon', 'kevin'}


#求没有同时报名两门课程的学员:对称差集
res=(pythons - linuxs) | (linuxs - pythons)
res=pythons ^ linuxs
print(res)
#{'tank', '李铁蛋', 'oldboy', '赵银蛋', 'egon', '张全蛋', 'kevin'}
print(pythons.symmetric_difference(linuxs))
#{'tank', '李铁蛋', 'oldboy', '赵银蛋', 'egon', '张全蛋', 'kevin'}

父集/子集: 包含与被包含关系

s1={1,2,3}
s2={3,1,2}
print(s1 == s2)
#True


s1={1,2,3}
s2={1,2}
print(s1 >= s2)
#True
print(s1.issuperset(s2))
#True
print(s2 <= s1)
#True
print(s2.issubset(s1))
#True


#长度len
#成员运算in和not
#掌握的操作
s1={'a','b','cc',2,3}
print(id(s1))
#2096922059944
s1.update({3,4,5})
print(s1,id(s1))
#{2, 3, 4, 5, 'cc', 'b', 'a'} 2096922059944
s1.add(4)
print(s1)
#{'a', 2, 3, 4, 'cc', 'b'}
res=s1.pop()
print(res)


#随机
res=s1.remove('b')
print(s1)
#{2, 3, 'cc', 'a'}
print(res)
#None
s1={1,2,3}
s2={3,4,5}
s1.difference_update(s2) # s1=s1-s2
print(s1)
#{1, 2}
s1.intersection_update(s2) # s1=s1 & s2
print(s1)
#{3}
s1.symmetric_difference_update(s2) # s1=s1 ^ s2
print(s1)
#{4, 5}
s1={1,2,3}
# s1.remove(4)
# s1.discard(4)
# res=s1.discard(3)
# print(res) # None
s1={1,2,3}
s2={4,5,6}
print(s1.isdisjoint(s2))
#True

总结

  存多个值

  无序

  set可变(1、可变:值变,id不变。可变==不可hash 2、不可变:值变,id就变。不可变==可hash)

  去重

names=['egon','egon','kevin','kevin','alex','alex']
l=[]
for name in names:
        if name not in l:
        l.append(name)
print(l)
#['egon', 'kevin', 'alex']
#如果去重的对象都是不可变类型并且不要求结果跟原来的顺序一致,那么可以用set来解决
res=set(names)
# print(res)
l=list(res)
print(l)


info=[
{'name':'egon','age':18,'sex':'male'},
{'name':'alex','age':73,'sex':'male'},
{'name':'egon','age':20,'sex':'female'},
{'name':'egon','age':18,'sex':'male'},
{'name':'egon','age':18,'sex':'male'},
]
l=[]
for dic in info:
        if dic not in l:
        l.append(dic)
print(l)
#[{'name': 'egon', 'age': 18, 'sex': 'male'}, {'name': 'alex', 'age': 73, 'sex': 'male'}, {'name': 'egon', 'age': 20, 'sex': 'female'}]
原文地址:https://www.cnblogs.com/ShenJunHui6/p/10220454.html