字典、元组、集合

  • 一、字典(可变)
  • 1.字典是什么
  • 2.字典的原理
  • 3.字典的创建
  • 4.字典元素的获取
  • 5.字典的常用操作
  • 6.字典的特点
  • 7.字典生成式
  • 二、元组(不可变)
  • 1.何为元组
  • 2.创建元组
  • 3.为何不可变
  • 4.遍历
  • 三、集合
  • 1.集合是什么
  • 2.创建集合
  • 3.集合的相关操作
  • 4.集合间的关系
  • 5.集合的运算
  • 6.集合生成式



一、字典(可变)

1.字典是什么

和列表一样是可变序列,用{ }定义,以键值对方式存储数据 key:value—{‘张三’:100, ‘李四’:97}
是一个无序序列(集合),列表为有序

字典中的键(key)存放数据根据哈希函数计算而来hash哈希值,key必须为不可变序列(字符串)
可变与不可变:指的是对象是否改变
细谈python序列可变与不可变

2.字典的原理

先计算哈希函数,找到key的位置,无需遍历

3.字典的创建

scores = {'我':100,'他':10,'她':99,}
print(scores)
print(type(scores))
#使用内置函数
students = dict(name='K', age=7)
print(students)
#空字典
a = dict{}

{‘我’: 100, ‘他’: 10, ‘她’: 99}
<class ‘dict’>
{‘name’: ‘K’, ‘age’: 7}

4.字典元素的获取

scores = {'我':100,'他':10,'她':99,}
print(scores['我'])
print(scores.get('她'))
print(scores.get('这个元素不存在'))#返回None
print(scores.get('这个元素不存在,但是可以返回自定义值',66))#返回66

100
99
None
66

5.字典的常用操作

key的判断:in,not in
键值对的删除:del[‘张三’]
清空字典元素:scores.clear()
键值对的新增(修改同样的格式):scores['陈六‘] = 89
获取key:keys = scores.keys()
获取value:values = scores.values()
获取items:items = scores.items()

将获得的keys(values)变为列表list(keys);items可变为元组list(items)

字典元素的遍历

for item in scores:
	print(item,scores[item],scores.get(item))

6.字典的特点

1.不允许元素的key重复
2.元素都是无序的,顺序都是哈希值算出来的
3.key必须为不可变对象:整数,字符串
4.字典也是动态伸缩的
5.浪费内存,节约时间

7.字典生成式

将两个列表的各个元素对应打包成键值对并生成字典

items = ['Fruits','Books','Others']
prices = [96,78,85,99,87]
#后面多出来的直接无视
#upper()转换大写
d = {item.upper():price for item,price in zip(items,prices)}
print(d)

{‘FRUITS’: 96, ‘BOOKS’: 78, ‘OTHERS’: 85}

 


 

二、元组(不可变)

1.何为元组

不可变序列:无增删改操作,不可变即无法不变对象(地址)的情况下增删改

t = (18,'j')

2.创建元组

t = ('Python',18,'j')
print(t)

t1 = tuple((28,'jk罗琳'))
t2 = 'Python',18,'j'
#可省略小括号
print(t1,t2)
print(type(t2))

t3 = (90,)#单个元素
print(t3)
print(type(t3))

#空元组,与字典、列表相对应
t4 = ()
t5 = tuple()

(‘Python’, 18, ‘j’)
(28, ‘jk罗琳’) (‘Python’, 18, ‘j’)
<class ‘tuple’>
(90,)
<class ‘tuple’>

3.为何不可变

1.多任务环境下可以不加锁
2.元组的元素不可变,但是若元素为可变对象(序列,字典),则可变对象的元素内容可变,即序列中的元素可变,如下图:

t = (89,['uj',78],90)

4.遍历

元组可迭代

t = ('Python',18,'j')
for words in t:
    print(words)

 


 

三、集合

1.集合是什么

集合是没有value的字典,就是只有key值,同样以哈希函数计算位置

2.创建集合

s = {3,2,43,2,65,4,8}
print(s)#集合中的元素不可重复

s_ = set(range(8))
print(s_)

s_1 = set([1,2,3,3,4,4])
print(s_1)

s_2 = set((1,2,3,4,567))
print(s_2)

s_3 = set('python')
print(s_3)

#空集合无法直接用{}
s_4 = set()

3.集合的相关操作

  • 判断是否存在某个元素

in/not in

  • 新增
s.add(80)#只能添加一个操作
s.update([80,90,78])#将列表的元素加到集合里
s.update((66,56,37))#将元组的元素加到集合里
  • 删除
s.remove(89)#无元素时会报错
s.discard(90)#没有这个元素时不会报错
s.pop()#无参数,随机弹出元素
s.clear()#无参数

4.集合间的关系

  • 可比较是否相同:只要元素相同,就相同(地址也一样)
s = {1,2,3,4}
s_2 = {4,3,2,1}
print(s == s_2)
print(s != s_2)
  • 子集判断
s1 = {1,2,3,4,5,6}
s2 = {1,2,3,4}
print(s2.issubset(s1))#True子集
print(s1.issuperset(s2))#True超集
print(s1.isdisjoint(s2))#True不是交集

5.集合的运算

  • 交集
s1 = {1,2,3,4,5,6}
s2 = {3,5}
print(s1.intersection(s2))
print(s2 & s2)
  • 交集
print(s1.union(s2))
print(s1 | s2)
  • 差集
print(s1.difference(s2))
print(s2.difference(s1))#输出set()空集
print(s1 - s2)
  • 对称差集
print(s1.symmetric_difference(s2))
print(s1 ^ s2)

6.集合生成式

将列表的中括号变为花括号就好

s = {i for i in range(6)}#无序的!