- 数据类型的基本使用
- dict数据类型转换 (数据类型的转换比较狭窄)
- {} + fromkeys 可以快速初始化字典
- key先准备好,value值先置空None,保证初始状态之后再赋值给value
- 通常都是None
- 元组tuple 的基本使用
- 整型 浮点型 字符串 列表
- tuple数据类型转换:只要是可迭代的(支持for循环)数据类型都可以转换成元组tuple
- print(tuple(111)) # TypeError: ‘int’ object is not iterable
- print(tuple(11.11)) # TypeError: ‘int’ object is not iterable
- 注意:如果元组内只有一个元素,那么必须用逗号分隔
- 集合类型set的基本使用
- 数据类型总结
数据类型的基本使用
字典dict的基本使用
- 用途:按照key:value的方式存放多个值,其中key对value应该有描述性的效果
- 定义方式:在{}内用逗号分隔开多个元素,每个元素都是key:value的组合,其中value可以是任意类型但是key必须是不可变类型,通常是字符串类型,并且key不能重复 ```python d={1:11111, 1.1:22222, “k1”:333333, (1,2,3):44444, [1,2,3]:5555} # d=dict(…) print(d[1]) # 报错 TypeError: unhashable type: ‘list’
dict数据类型转换 (数据类型的转换比较狭窄)
res = dict([(“name”, “jack”), [“age”, 18], [“gender”, “male”]]) print(res) # {‘name’: ‘egon’, ‘age’: 18, ‘gender’: ‘male’}
res = dict(a=1, b=2, c=3) # 可以用这种方式造字典 print(res) # {‘a’:1, ‘b’:2, ‘c’:3}
d = {} # 造空字典
d = dict()
print(type(d)) #
{} + fromkeys 可以快速初始化字典
res = {}.fromkeys([‘name’, “age”, “gender”], None) # 前面每一个值都跟None配对 res = {}.fromkeys([‘name’, “age”, “gender”], 11) # 前面每一个值都跟11配对 res[“name”] = 666 # 只有name值变了,其余的都不变
key先准备好,value值先置空None,保证初始状态之后再赋值给value
通常都是None
res = {}.fromkeys([‘name’, “age”, “gender”], [])
res[“name”] = 666 print(res) # {‘name’: 666, ‘age’: [], ‘gender’: []}
res[“name”].append(111) print(res) # {‘name’: [111], ‘age’: [111], ‘gender’: [111]}
<a name="c288f7d5"></a>
### dict 常用操作
**优先掌握的操作**
**1、按key存取值:**可存可取,key不存在会直接报错
```python
d = {"k1": 111, 'k2': 222}
print(d['k1']) # 111
d['k1'] = 6666 # key存在为修改值
d['k3'] = 6666 # 字典是可以根据不存在的key往里面加值的
print(d) # {'k1': 6666, 'k2': 222, 'k3': 6666}
2、统计字典内部键值对的个数 len
d = {"k1": 111,'k2':222}
print(len(d)) # 2
3、成员运算in和not in: 判断的是key
d = {"name": "jack",'age':18}
print("jack" in d) # False
print("name" in d) # True
4、删除元素
d = {"name": "jack", 'age': 18}
# 方式一:万能删除法
del d["name"]
print(d) # {'age': 18}
# 方式二:指定k弹出键值对 给出v
v = d.pop("name") # 指定key删除
print(d) # {'age': 18} 显示key已经删除
print(v) # jack pop删除功能会把删除key对应的value值返回
# 方式三:弹出键值对 组织成元组的形式 第一个元素是k第二个元素是v(了解)
item = d.popitem()
print(item) # ('age', 18) popitme删除法会把删除的key和value值存成元组返回
print(d) # {}
5、键keys(),值values(),键值对items()
# keys() values() items() 在python2中是列表 在python3中是迭代器(老母猪)
d = {"name": "jack", 'age': 18, "gender": "male"}
# 获取字典所有的键 看成列表即可
print(d.keys()) # dict_keys(['name', 'age', 'gender'])
# 获取字典所有的值 看成列表即可
print(d.values()) # dict_values(['jack', 18, 'male'])
# 获取字典里面所有的键值对 组织成列表套元组的形式 元组内有两个元素 第一个是k第二个是v
print(d.items()) # dict_items([('name', 'jack'), ('age', 18), ('gender', 'male')])
6、循环
d={"name":"jack",'age':18,"gender":"male"}
for k in d.keys():
print(k)
for k in d: # 同上,不加.keys()默认就是
print(k)
'''
name
age
gender
'''
for v in d.values(): # 只遍历value
print(v)
'''
jack
18
male
'''
for k,v in d.items(): # k,v = ('gender', 'male'),
print(k,v)
'''
name jack
age 18
gender male
'''
# 用list的方式还原成Python 2 的样子
print(list(d.keys())) # ['name', 'age', 'gender']
print(list(d.values())) # ['egon', 18, 'male']
print(list(d.items())) # [('name', 'jack'), ('age', 18), ('gender', 'male')]
7、d.get()(取值方式)
d={"name": "jack", 'age': 18, "gender": "male"}
# 方式一:
print(d["name"]) # jack
print(d["xxx"]) # key不存在直接报错,按k取值不太推荐使用该方式
# 方式二:
print(d.get("name")) # jack
# 没取到key返回None,key值不存在的时候采用此种方式
print(d.get("xxx", '哈哈哈')) # None 第二个参数 可以在k不存在的时候自定义返回信息
dict 内置的方法
需要掌握的操作
d = {"name": "egon", 'age': 18, "gender": "male"}
# clear():清空字典里面的key和value值
d.clear() # 清空字典
print(d) # {}
# copy():浅copy 复制
d.copy()
print(d) # {'name': 'jack', 'age': 18, 'gender': 'male'}
d = {"name": "jack", 'age': 18}
if "gender" not in d:
d['gender'] = "male"
print(d) # {'name': 'jack', 'age': 18, 'gender': 'male'}
# setdefault():key不存在则添加key:value,key如果存在则什么都不做
d.setdefault("gender","male") # 与上面if 同种功能
print(d) # {'name': 'jack', 'age': 18, 'gender': 'male'}
# update() # 更新字典,不相同的加入老字典,相同的新替旧
d = {"name": "jack", 'age': 18, "gender": "male"}
d.update({"k1": 111, "name": "xxx"})
print(d) # {'name': 'xxx', 'age': 18, 'gender': 'male', 'k1': 111}
- 该类型总结
- 存多个值
- 无序
- 可变
元组tuple 的基本使用
- 用途:元组就相当于一种不可变的列表,所以说元组也是按照位置存放多个任意类型的元素
- 定义方式:在 () 内用逗号分隔开多个任意类型的元素,但是元组内元素不支持‘修改’(索引指向的元素的内存地址不能改变)
```python
x = (11)
print(x, type(x)) # 11
整型 浮点型 字符串 列表
t = (11, 11.33, “xxx”, [44,55])
print(t[-1][0]) # 44
print(type(t)) #
tuple数据类型转换:只要是可迭代的(支持for循环)数据类型都可以转换成元组tuple
print(tuple(111)) # TypeError: ‘int’ object is not iterable
print(tuple(11.11)) # TypeError: ‘int’ object is not iterable
print(tuple(‘hello’)) # (‘h’, ‘e’, ‘l’, ‘l’, ‘o’)
print(tuple([11, 22, 33])) # (11, 22, 33)
print(tuple({‘name’: ‘jason’, ‘pwd’: 123})) # (‘name’, ‘pwd’)
注意:如果元组内只有一个元素,那么必须用逗号分隔
t = (11,)
print(type(t)) #
<a name="57818ca7"></a>
### tuple 常用操作
**优先掌握的操作**
**1、按索引取值(正向取+反向取):**只能取,不能改
```python
t = (11, 22, 33)
print(t[1]) # 22
print(t[-1]) # 33
# t[0] = 7777 # 元组不支持赋值操作
2、切片(顾头不顾尾,步长)
t = (11, 22, 33, 44, 55, 666)
# 切片
print(t[1:5]) # (22, 33, 44, 55)
# 步长
print(t[0:4:2]) # (11, 33)
3、长度
t = (11, 22, 33, 44, 55, 666)
print(len(t)) # 6
4、成员运算in和not in
t = (11, 22, 33, [44, 55, 666])
print([44, 55, 666] in t) # True
5、循环
t = (11, 22, 33, [44, 55, 666])
for x in t:
print(x)
'''
11
22
33
[44, 55, 666]
'''
tuple 内置方法
需要掌握的操作
t = (33, 22, 33, [44, 55, 666])
# count():统计某个元素出现的个数
print(t.count(33)) # 2
# index():指定范围从1开始找
print(t.index(33, 1, 4)) # 2
"""
元组指的不可变,是元组索引对应的内存地址不可变,
如果元组内子元素是列表的话是可以改的
"""
- 该类型总结
- 存多个数
- 有序
- 不可变
集合类型set的基本使用
- 用途:去重和关系运算
- (1)无法保证顺序 ```python msg = “hello” res = set(msg) print(res) # 去重且无序,得到是集合类型 print(‘’.join(res)) # 转换回字符串得到的是乱序
names = [‘jason’, ‘lxx’, ‘lili’, “jason”, “jason”] print(set(names)) # {‘jason’, ‘lili’, ‘lxx’} 转集合后,去重无序 print(list(set(names))) # [‘lxx’, ‘jason’, ‘lili’] 去重转回列表类型,去重且无法保证原始顺序
- (2)只能针对不可变类型元素的去重
```python
students_info = [
{"name":"jason", "age":18, "gender":"male"},
{"name":"tom", "age":19, "gender":"male"},
{"name":"jack", "age":38, "gener":"female"},
{"name":"jason", "age":18, "gender":"male"},
{"name":"jason", "age":18, "gender":"male"},
]
new_l = []
for info in students_info:
if info not in new_l:
new_l.append(info) # 用l.append一点一点的遍历
print(new_l) # 达到去重效果并且保证顺序,此种方式是去重常用
定义方式:在{ }内用逗号分隔开多个元素,集合内元素的特点有三个
** (1)集合内元素必须是不可变类型**<br />** (2)集合内元素不能重复**<br />** (3)集合内元素无序**
# 整型 浮点型 字符串 元组
s = {11, 3.1, "xxx", (1, 2, 3)}
print(s) # {3.1, (1, 2, 3), 11, 'xxx'}
s = {11, 11, 11, 11, 11, 22, 33} # s = set(...)
print(s) # {33, 11, 22} 重复元素只能留一个
print(type(s)) # <class 'set'>
# 1.定义空集合需要使用关键字set
s1 = set() # 定义空集合,必须得用set()
print(s, type(s)) # set() <class 'set'>
# 2.类型转换:能够支持for循环的数据类型都可以转成集合(元素要是不可变类型)
res = set("hello")
print(res) # {'o', 'h', 'l', 'e'} 注意:去重且无序
name_list = ['kevin', 'jason', 'jason', 'jason', 'kevin', 'kevin']
# 先将列表转换成集合
s1 = set(name_list)
# 再将去重之后的集合转换成列表
l1 = list(s1)
print(l1) # ['jason', 'kevin']
# 小练习
ll = [33, 22, 11, 22, 11, 44, 33, 22, 55, 66, 77, 77, 66, 55, 44]
# 1.基本要求:去重即可
s1 = set(ll)
ll1 = list(s1)
print(ll1) # [33, 66, 11, 44, 77, 22, 55]
# 2.拔高要求:去重并保留原来的顺序
# 1).先定义一个新列表
new_list = []
# # 2).for循环ll列表
for i in ll:
# 3).判断当前元素是否在新列表中
if i not in new_list:
# 3.1) 如果不在 则添加到新列表
new_list.append(i)
# 3.2) 如果在 则不管
print(new_list) # [33, 22, 11, 44, 55, 66, 77]
set 常用操作
优先掌握的操作
(1)交集:取两个集合的共同部分:求两个用户的共同好友
friends1 = {"tom", "jack", "kevin", "jason", "goff"}
friends2 = {"ricky", "cindy", "mary", "jason", "goff", "Jerry"}
# 方式一
print(friends1 & friends2) # {'goff', 'jason'}
# 方式二
print(friends1.intersection(friends2))
# 将两个集合的交集结果赋值给 friends1
friends1 = friends1 & friends2
# 方式一
print("friends1")
# 方式二
friends1.intersection_update(friends2)
print("friends1")
(2)并集:两个集合并到一起:求两个用户所有的好友
friends1 = {"tom", "jack", "kevin", "jason", "goff"}
friends2 = {"ricky", "cindy", "mary", "jason", "goff", "Jerry"}
# 方式一
print(friends1 | friends2)
# 方式二
print(friends1.union(friends2))
# {'cindy', 'mary', 'Jerry', 'ricky', 'tom', 'kevin', 'goff', 'jack', 'jason'}
(3)差集: 一个集合减掉与另外一个集合共同的部分
friends1 = {"tom", "jack", "kevin", "jason", "goff"}
friends2 = {"ricky", "cindy", "mary", "jason", "goff", "Jerry"}
# 用户1独有的好友
# 方式一
print(friends1 - friends2) # {'jack', 'tom', 'kevin'}
# 方式二
print(friends1.difference(friends2))
# 求用户2独有的好友
# 方式一
print(friends2 - friends1) # {'mary', 'ricky', 'cindy', 'Jerry'}
# 方式二
print(friends2.difference(friends1))
(4) 交叉补集/对称差集:两个集合互相减,然后再并到一起:用户1和用户2各自的好友
friends1 = {"tom", "jack", "kevin", "jason", "goff"}
friends2 = {"ricky", "cindy", "mary", "jason", "goff", "Jerry"}
# 方式一: ^ 与 | 方式更简单
res = (friends1 - friends2)| (friends2- friends1)
res = friends1 ^ friends2
print(res) # ('mary', 'jack', 'cindy', 'tom', 'ricky', 'Jerry', 'kevin'}
# 方式二
print(friends1.symmetric_difference(friends2)
(5)父子集合:当一个集合完全包含了另外一个集合,该集合才能称爹
s1 = {1, 2, 3}
s2 = {3, 4, 5}
# 没有包含关系,s1不包含s2所以无法成立,只能说明s1不是s2它爹
print(s1 >= s2) # False
# 大于等于和小于等于指的不是传统认知的比大小,指的是包含关系
print(s2 <= s1) # False
s1 = {1, 2, 3}
s2 = {1, 2}
# 有包含关系,集合成立说明s1包含s2,s1是s2它爹
# 方式一
print(s1 >= s2) # Ture
# 方式二
print(s1.issuperset(s2)) # Ture
# 有包含关系,集合成立说明s2继承自s1,s2是s1它儿子
# 方式一
print(s2 <= s1) # Ture
# 方式二
print(s2.issubset(s1)) # Ture
set 内置方法
需要掌握的操作
1、update():更新,把两个集合并到一起,去重
s1 = {1, 2, 3}
s1.update({3, 4, 5})
print(s1) # {1, 2, 3, 4, 5} 相当于可以一次性加多个值
2、add():加值,一次加一个值
s1 = {1, 2, 3}
s1.add(4)
print(s1) # {1, 2, 3, 4}
3、删除
# 方式一:remove()
s1 = {1, 2, 3}
s1.remove(3) # 指定元素删除
print(s1) # {1, 2}
# 方式二:discard()
s1 = {11, 22, 33, "xx", "yy", "zz"}
s1.remove(33333) # 删除元素不存在 报错
s1.discard(33333) # 删除元素不存在 啥事都不会做,不会报错
print(s1)
s1 = {11,22,33,44,55,"xx","yy","zz","aa"}
res=s1.pop()
print(s1) # 随机删除元素
print(res) # 返回删除值,相当于pop取走的值
s1 = {11,22,33,44,55,"xx","yy","zz","aa"}
s1.clear() # 整个清空掉
print(s1) # set() 空集合
4、copy():复制集合,无序
s1 = {11,22,33,44,55,"xx","yy","zz","aa"}
s1.copy()
print(s1) # {33, 'aa', 'yy', 11, 44, 'zz', 22, 55, 'xx'}
5、isdisjoint():判断两个集合完全没有共同部分,毫不相干
# 没有相同部分
s1 = {1, 2, 3}
s2 = {4, 5, 6}
print(s1.isdisjoint(s2)) # True
# 有相同部分
s1 = {1, 2, 3}
s2 = {3, 4, 5, 6}
print(s1.isdisjoint(s2)) # False
- 该类型总结
- 存多个值
- 无序
- 可变
s1 = {1,2,3}
print(id(s1)) # 2048402597696
s1.add(4)
print(s1) # {1, 2, 3, 4}
print(id(s1)) # 2423667894080 id没变
# 集合本身纯粹的元素应该是不可变类型,但集合本身就是一个可变类型。
数据类型总结
按存储空间的占用分(从低到高)
整型
浮点型
字符串
集合:无序,即无序存索引相关信息
元组:有序,需要存索引相关信息,不可变
列表:有序,需要存索引相关信息,可变,需要处理数据的增删改
字典:无序,需要存key与value映射的相关信息,可变,需要处理数据的增删改
按存值个数区分
- 标量/原子类型(不可再分,只能存一个值):整型,浮点型,字符串
- 容器类型(能存多个值):列表,元组,字典,集合
按可变不可变区分
- 可变:列表,字典,集合
- 不可变:整型,浮点型,字符串,元组
按访问顺序区分
- 直接访问:整型,浮点型
- 顺序访问(序列类型):字符串,列表,元组
- key值访问(映射类型):字典