一、学习知识点概要
(一)字典(可变类型与不可变类型、字典的定义、创建和访问字典、字典的内置方法)
(二)集合(创建集合、访问集合中的值、集合的内置方法、集合的转换、不可变集合)
(三)序列(针对序列的内置函数)
二、学习内容
(一)字典
①判断可变类型与不可变类型:
【方法】
麻烦方法:用 id(X)
函数,对 X 进行某种操作,比较操作前后的 id
,如果不一样,则 X
不可变,如果一样,则 X
可变。
便捷方法:用 hash(X)
,只要不报错,证明 X
可被哈希,即不可变,反过来不可被哈希,即可变。
-
序列是以连续的整数为索引,与此不同的是,字典以"关键字"为索引,关键字可以是任意不可变类型,通常用字符串或数值。
-
字典是 Python 唯一的一个 映射类型,字符串、元组、列表属于序列类型。
-
数值、字符和元组 都能被哈希,因此它们是不可变类型。
-
列表、集合、字典不能被哈希,因此它是可变类型。
②字典的定义
字典 是无序的 键:值(key:value
)对集合,键必须是互不相同的(在同一个字典之内)。
-
dict
内部存放的顺序和key
放入的顺序是没有关系的。 -
dict
查找和插入的速度极快,不会随着key
的增加而增加,但是需要占用大量的内存。
字典 定义语法为{元素1,元素2,元素3……,元素n}
-
其中每一个元素是一个「键值对」-- 键:值(key:value)
-
关键点是「大括号 {}」,「逗号 ,」和「冒号 :」
-
大括号 -- 把所有元素绑在一起
-
逗号 -- 将每个键值对分开
-
冒号 -- 将键和值分开
③创建和访问字典
(1)通过字符串或数值作为key来创建字典。
注意:如果我们取的键在字典中不存在,会直接报错KeyError。
(2)通过元组作为key来创建字典,但一般不这样使用。
(3)通过构造函数dict来创建字典
1.dict()创建一个空字典【通过key直接把数据放入字典中,但一个key只能对应一个value,多次对一个key放入value,后面的值会把前面的值冲掉。 】
2.dict(mapping)
3.dict(**kwargs)【这种情况下,键只能为字符串类型,并且创建的时候字符串不能加引号,加上就会直接报语法错误。 】
④字典的内置方法
(二)集合
集合与字典类似,也是一组key的集合,但不存储value。由于key不能重复,所以,在set中,没有重复的key。(注意:key为不可变类型,即可哈希的值。)
①集合的创建
1.先创建对象再加入元素;
2.在创建空集合的时候只能使用s=set(),因为s={}创建的是空字典。
basket = set()
basket.add('apple')
basket.add('banana')
print(basket) # {'banana', 'apple'}
3.直接把一堆元素用{大括号}括起来;
4.重复元素在set中会被过滤。
5.使用set(value)工厂函数,把列表或元组转换成集合。
6.去掉列表中重复的元素
集合特点:无序和唯一。由于set存储的是无序集合,所以不能创建索引或执行切片(slice)操作,也没有键(keys)可获取集合中元素的值,但可判断某元素是否在集合中。
②访问集合中的值
1.len()内建函数:得到集合的大小
2.for:把集合中的数据一个个读取出
3.in或not in:判断某元素是否在集合中
③集合的内置方法
④集合的转换
⑤不可变集合
frozenset([iterable])返回一个冻结的集合,冻结后集合不能再添加或删除任何元素。
(三)序列
针对序列的内置函数
三、学习问题与解答(自己遇到的问题+课后题)
(一)字典
1、字典基本操作
dic = {
'python': 95,
'java': 99,
'c': 100
}
#字典的长度是多少
print(len(dic))
#请修改'java' 这个key对应的value值为98
del dic['java']
dic.setdefault('java',98)
print(dic)
#删除 c 这个key
del dic['c']
print(dic)
#增加一个key-value对,key值为 php, value是90
dic2 = {'php' : 90}
dic.update(dic2)
print(dic)
#判断 javascript 是否在字典中
if 'javascript' in dic:
print('键javascript存在')
else:
print('键javascript不存在')
#字典 dic1 = {'php': 97}, 将dic1的数据更新到dic中
dic1 = {'php' : 97}
dic.update(dic1)
print(dic)
[未解决的问题]
#获取所有的key值,存储在列表里
#获取所有的value值,存储在列表里
#获得字典里所有value 的和
#获取字典里最大的value
#获取字典里最小的value
未能单独取出key或value
2.字典中的value
data = {
'python': {'上学期': '90', '下学期': '95'},
'c++': ['95', '96', '97'],
'java': [{'月考':'90', '期中考试': '94', '期末考试': '98'}]
}
思考:分别取出key和value
(二)集合
1.怎么表示只包含⼀个数字1的元组。
basket = set()
basket.add(1)
print(basket)
2.创建一个空集合,增加 {‘x’,‘y’,‘z’} 三个元素。
basket = set()
basket.add('x')
basket.add('y')
basket.add('z')
print(basket)
3. 列表['A', 'B', 'A', 'B']去重
s = set(['A','B','A','B'])
print(s)
4.求两个集合{6, 7, 8},{7, 8, 9}中不重复的元素(差集指的是两个集合交集外的部分)。
a= set('678')
b= set('789')
c=a.difference(b)
print(c)
#{'6'}
出错了……答案应该是6和9,不过还没有找到改进的方法。
(三)序列
序列中的最大最小值:max(sub)和min(sub)
四、学习思考与总结
本次学习加笔记时间大概在六个小时左右,时间比较仓促,有很多课后题还来不及深入思考和改进。