文章目录
元组(tuple)
1.元组介绍(掌握)
元组也是 序列结构,但是是一种 不可变序列,你可以简单的理解为内容不可变的列表。除了在内部元素不可修改的区别外,元组和列表的用法差不多。
- 元组消耗的内存比列表少
- 当元素不需要发生改变推荐使用元组
- 当元素需要发生改变推荐使用列表
2.元组创建(掌握)
创建一个元组,只要把 逗号 分隔的 不同的数据元素 使用 小括号 括起来即可。
tu = (1, 2, 3, 4)
除此之外,我们还可以直接通过 tuple() 来进行创建元组。
print(tuple('1231224')) # ('1', '2', '3', '1', '2', '2', '4')
3.元组与列表相同的操作(熟悉)
- 使用 方括号加下标 访问元素
tu = (1, 2, 3, 4)
print(tu[0]) # 1
- 切片(形成新元组对象)
tu = (1, 2, 3, 4)
print(tu[0:3]) # (1, 2, 3)
- tuple.count() / tuple.index()
tu = (1, 2, 3, 4, 4, 4, 4, 4, 4)
print(tu.count(4)) # 6;求这个元素出现的次数
print(tu.index(4)) # 3:求这个元素最小的索引位置
- python内置函数:reversed(),sorted()
tu = (1, 2, 4, 5, 3, 6, 8, 7)
print(tuple(reversed(tu))) # (7, 8, 6, 3, 5, 4, 2, 1);反转
tu = (1, 2, 4, 5, 3, 6, 8, 7)
print(sorted(tu)) # [1, 2, 3, 4, 5, 6, 7, 8];排序
- 加法及乘法
tu = (1, 2, 3, 4)
tu_2 = (5, 6, 7)
print(tu + tu_2) # (1, 2, 3, 4, 5, 6, 7)
tu = (1, 2)
print(tu * 2) # (1, 2, 1, 2)
4.元组中不允许的操作(熟悉)
- 不允许 修改 、新增 元素。(一级)
- 不允许 删除 某个元素(但可以删除整个元组)
实际上,元组没有任何会对内部元素发生 修改 动作的方法。例如,元组没有remove,append,pop 等方法
5.元组与列表之间的转换(掌握)
- list --> tuple ; tuple(iterable)
tu = (1, 2, 3)
print(list(tu)) # [1, 2, 3]
- tuple --> list ; list(iterable)
li = [1, 2, 3]
print(tuple(li)) # (1, 2, 3)
字典(dict)
1.字典的创建(掌握)
Python 的字典数据类型是基于 hash 散列算法实现的,采用 键值对 (key:value) 的形式,根据 key 的值计算 value 的地址,具有非常快的查取和插入速度。它是一种 可变对象 ,所以支持修改、插入、删除等操作。
2.字典创建(掌握)
- dict()
- dict(**kwargs) 键值对
- dict(mapping) 映射
# dict()
PersonalInformation = {'name':'Jeff', 'age':18}PersonalInformation = {'name':'Jeff', 'age':18, 'hobbit':['play game', 'study python']}
# dict(**kwargs)
dic = dict(name='jeff', age=18)
# dict(mapping)
dic = dict[('name', 'jeff'), ('age', 18)]
注意:
- 创建字典;元素不限;值可以为任意类型;key值只能是不可变数据类型
- 在 Python3.6 开始,字典对象会保持键值插入时的 顺序 ,并且其包含的 元素个数不限,值的类型 也可以是其它任何数据类型。
- 字典的 key 必须是 不可变的对象,例如整数、字符串、bytes 和元组,但使
用最多的还是字符串。 列表、字典、集合等就不可以作为 key。同时,同一个字典内的 key 必须是唯一 的(重复则覆盖),但值则不必。
6.字典创建(拓展)
- map(func,*iterables):
将 iterables 里面的元素逐个传到 func 里面做处理
# 需求:list('1234') --> [1,2,3,4]
# map:映射;将li中的每一个元素都映射到int中,再返回
li = list('1234')
print(list(map(int, li))) # [1, 2, 3, 4]
- zip(iter1 [,iter2 […]]):
将iter1 iter2 中对应的元素打包成一个个元组,然后返回由这些元组组成的列表。
# li_k = ['name','age'] 与 li_v = ['amy' , 18] 怎么组合成 键值对 的字典?
# zip:打包;将可迭代对象一一对应,打包成元组,进行返回
li_k = ['name', 'age']
li_v = ['amy', 18]
# print(zip(li_k, li_v)) #<zip object at 0x000001F33BC5BB48> zip类型
print(dict(zip(li_k, li_v))) # {'name': 'amy', 'age': 18}
7.访问字典(掌握)
字典是 集合类型,不是序列类型,因此 没有索引下标 的概念,更 没有切片 的说法。但是,与 list 类似,字典采用把 相应的键 放入 方括号 内获取 对应值 的
方式取值
如:dic[exit_key]
dit = {'name': 'Jeff', 'age': 18}
print(dit['name'])
思考:当 key 值不存在时,程序会怎么样呢?
dit = {'name': 'Jeff', 'age': 18}
print(dit['asdf']) # 当key值不存在则报错
8.字典的增加与修改(掌握)
- 增加 就是往字典 插入新的键值对
dit = {'name':'Jeff'}
dit['age'] = [18]
print(dit) # {'name': 'Jeff', 'age': [18]}
- 修改 就是给 原有的键赋予新的值。由于一个 key 只能对应一个值,所以,多次对一个 key 赋值,后面的值会把前面的值 覆盖 掉。
dit = {'name':'Jeff'}
dit['age'] = [18]
print(dit) # {'name': 'Jeff', 'age': [18]}
dit['age'] = [20]
print(dit) # {'name': 'Jeff', 'age': [20]}
9.一系列删除(掌握)
- 删除字典元素:del dic[exit_key] 或dic.pop(exit_key)
dit = {'name': 'Jeff', 'age': [20]}
del dit['name'] # 单独删除某个元素
- 删除整个字典:del dic
dit = {'name': 'Jeff', 'age': [20]}
del dit# 删除整个字典
- 清空整个字典:dic.clear()
dit = {'name': 'Jeff', 'age': [20]}
dit.clear()
10.字典常见操作(熟悉)
- D.get(k[,d]) --> 返回指定键的值,如果值不在字典中,则返回default值
dit = {'name': 'Jeff', 'age': [20]}
print(dit.get('name')) # 跟方括号直接获取的结果一样,但是获取不存在的值时,不会报错
- D.items() --> 以列表返回可遍历的(键, 值) 元组对
dit = {'name': 'Jeff', 'age': [20]}
print(dit.items())
- D.keys() --> 以列表返回字典所有的键
dit = {'name': 'Jeff', 'age': [20]}
print(dit.keys())
- D.values() --> 以列表返回字典所有的值
dit = {'name': 'Jeff', 'age': [20]}
print(dit.values())
3.作业
作业一
lis_1 = [‘name’, ‘author’, ‘introduce’]
lis_2 = [‘NORWEGIAN WOOD’, ‘haruki Murakami’, ‘balabalabalabalabala’]
将lis_1和lis_2以键值对的形式呈现
lis_1 = ['name', 'author', 'introduce']
lis_2 = ['NORWEGIAN WOOD', 'haruki Murakami', 'balabalabalabalabala']
print(dict(zip(lis_1, lis_2)))
作业二
Amy_info={‘name’:‘amy’, ‘addr’:‘hunan’, ‘weight’:90}获取Amy_info的key和value
import random
num = input('生成多少个:')
num_1 = 1
if str.isdigit(num):
if float(num) <= 1000:
while num_1 <= int(num):
a = random.randint(0, 1000)
print(a)
num_1 += 1
else:
print('请输入小于一千的数')
else:
print('请输入全数字')
作业三(扩展)
生成了N个1~1000之间的随机整数(N <= 1000),N是用户输入的,对于其中重复的数字只保留一个,把其余相同的数字去掉,然后把这些数从小到大排序。(注意此处需要用到随机整数,可了解random模块的具体方法;for循环,range()函数等结合使用,作为预习)
import random
num = input('生成多少个:')
num_1 = 1
b = set()
if str.isdigit(num):
if float(num) <= 1000:
while num_1 <= int(num):
a = random.randint(0, 1000)
b.add(a)
num_1 += 1
else:
print('请输入小于一千的数')
else:
print('请输入全数字')
print(b)
作业四
- 字节如何转换字符
s = '123'
print(s.encode())
- 字符如何转换字节
s = b'123'
print(s.decode())
作业五
总结数据类型哪些为可变,哪些为不可变。
- 数值类型(不可变)
- 布尔类型(不可变)
- 字符串类型(不可变)
- bytes数据类型(不可变)
- 元组(不可变)
- 集合(可变)
- 列表(可变)
- 字典(可变)