容器类型"/>
容器类型
1. 列表
1.1 简介
1. 索引
- 索引就是元素在列表中的位置编号
- 注意:从列表中取值时,如果超出索引范围,程序会报错
2. 定义
- 列表的索引从
0
开始 - 列表用
[]
定义,元素之间使用,
分隔
3. 作用
- 专门用于存储 一串数据,存储的数据称为 元素
4. 地位
list
(列表) 是Python
中使用最频繁的数据类型
5. 应用
"""
列表定义的格式:
列表变量的名字 = [元素1, 元素2, ……]使用格式:列表变量[位置]位置:也叫下标、索引
"""# 列表定义
name_list = ['mike', 'yoyo', 'rock', 'lily']
# 0 1 2 3
# -4 -3 -2 -1# 最后一个元素取出来
print(name_list[3])
print(name_list[-1])# 访问列表元素,不要超出范围,不要越界
# IndexError: list index out of range
# print(name_list[4])
1.2 常用操作
1.3 嵌套
1. 简介
- 一个列表中的元素又是列表,那么这就是列表的嵌套
2. 应用
school_list = [['北京大学', '清华大学'], ['中山大学', '华南理工大学'], ['哈工大', '哈工程']]
# 0 1 2# 取出第 2 个元素,也就是索引为1的元素
print(school_list[1]) # ['中山大学', '华南理工大学']# 先取出索引为1的元素,再继续索引为1的元素
# ['中山大学', '华南理工大学']
# 0 1
print(school_list[1][1]) # '华南理工大学'
1.4 循环遍历
- 遍历就是从头到尾依次从列表中取出每一个元素
- Python中专门提供for循环实现遍历
# 遍历,从头开始找,直到结束
name_list = ['mike', 'yoyo', 'rock', 'lily']# 通过while实现遍历
# 1. 定义条件变量i = 0
i = 0# 2. while i < 列表元素个数:
while i < len(name_list):# 3. 取出某个元素,打印name = name_list[i]print(name)# 4. 条件变量的修改i += 1print('==========华丽分割线=============')# for遍历循环,和上面的while效果等价
# 从头到尾 依次从 列表 中取出 每一个元素
for name in name_list:print(name)
1.5 if…in 和 for…in 的区别
- if…in:判断某个元素是否在列表中,如果在,if的条件为True
- for…in:从头到尾 依次从 列表 中取出 每一个元素
name_list = ['mike', 'yoyo', 'rock', 'lily']# if…in:判断某个元素是否在列表中,如果在,if的条件为True
name = 'yoyo'# name的内容'yoyo'是否在name_list列表中,如果在,name in name_list结果为True
if name in name_list:print('%s 在列表中' % name)print('==========华丽分割线=============')# for…in:从头到尾 依次从 列表 中取出 每一个元素,这个元素给name赋值
for name in name_list:print(name)
运行结果:
yoyo 在列表中
==========华丽分割线=============
mike
yoyo
rock
lily
1.6 for…else
- for循环里面没有遇到break语句,for执行完后,则会执行else的分支
name_list = ['mike', 'yoyo', 'rock', 'lily']for name in name_list:print(name)# 测试有break,和没有break的else执行情况# if name == 'yoyo':# break
else:print('for循环里面没有遇到break语句,for执行完后,则会执行else的分支')
运行结果:
mike
yoyo
rock
lily
for循环里面没有遇到break语句,for执行完后,则会执行else的分支
2. 元组
2.1 定义
- 元组的索引从
0
开始 - 元组用
()
定义
# 列表:列表变量 = [元素1, 元素2, ……]
# 元组:元组变量 = (元素1, 元素2, ……)
my_tuple = ('mike', 'yoyo', 'lily')
# 0 1 2# 取出第0个元素
print(my_tuple[0]) # 输出:'mike'
- 元组中只包含一个元素时,需要在元素后面添加逗号
# 元组只有一个元素的时候,格式: (元素,)
my_tuple1 = (250,)
# 打印my_tuple1的类型
print(type(my_tuple1))
2.2 作用
- 用于存储** 一串数据,元素**之间使用
,
分隔
2. 常用操作
tuple
(元组)与列表类似,不同之处在于元组的元素不能修改
my_tuple = ('mike', 'yoyo', 'lily')
# 元组只读不能改
# TypeError: 'tuple' object does not support item assignment
# my_tuple[0] = 'rock' # err
3. 字典
3.1 简介
1. 定义
- 字典用
{}
定义 - 字典使用键值对存储数据,键值对之间使用
,
分隔- 键
key
是索引,值value
是数据 - 键和值之间使用
:
分隔 - 值可以取任何数据类型,但键只能使用字符串、数字或元组
- 键必须是唯一的
- 键
"""
字典定义格式:字典变量 = {k1:v1, k2:v2,……}取出元素的值:字典变量[键值]
"""
# 字典的定义
info = {'name': 'mike', 'age': 34, 'city': 'sz'}
print(info) # {'name': 'mike', 'age': 34, 'city': 'sz'}# 取出元素的值:字典变量[键值]
print(info['city'])
2. 作用
- 字典同样可以用来存储多个数据
- 通常用于存储描述一个物体的相关信息
3.2 常用操作
3.3 遍历
"""
# 遍历字典, 获取所有的键值对 (键, 值)
for k, v in 字典变量.items():print(k, v)
"""
info = {'name': 'mike', 'age': 34, 'city': 'sz'}for k, v in info.items():print(k, v)
3.4 应用
需求: 登录注册系统
在开发中,字典的应用场景是:
- 使用多个键值对,存储描述一个
物体
的相关信息 —— 描述更复杂的数据信息 - 将多个字典放在一个列表中,再进行遍历,在循环体内部针对每一个字典进行相同的处理
用户1: {'name': 'mike', 'pwd':123456}
用户2: {'name': 'yoyo', 'pwd':123456}用户管理列表:
user_list = [{'name': 'mike', 'pwd':123456}, {'name': 'yoyo', 'pwd':123456}]
登录注册系统需求:完成用户注册、用户登录功能
思路:
"""
登录注册系统需求:1.用户注册/ 2.用户登录/ 3.退出程序0. 定义一个列表,用于存储用户字典1. 死循环 while True:2. 输入数字指令3. 判断指令,选择分支4. 用户注册功能4.1 输入注册的用户名4.2 通过for遍历列表,取出的每个元素是字典4.3 字典['name']和输入注册的用户名比较是否相等4.4 如果相等,打印提示:名字在列表中,不允许注册4.5 跳出循环4.6 for循环的else,循环里面没有执行到break,则会执行else4.7 输入注册的密码4.8 创建一个字典4.9 字典追加到列表中4.10 打印:注册成功5. 用户登陆功能5.1 输入登陆的用户名和密码5.2 通过for遍历列表,取出的每个元素是字典5.3 字典['name']和登陆用户名比较 and 字典['pwd']和登陆密码比较5.4 如果都相等,打印提示:登陆成功5.5 跳出循环5.6 for循环的else,循环里面没有执行到break,则会执行else5.7 打印:用户名或密码错误,请重新登陆
"""
实现:
# 0. 定义一个列表,用于存储用户字典
user_list = [{'name': 'mike', 'pwd': 123456}, {'name': 'yoyo', 'pwd': 123456}]# 1. 死循环 while True:
while True:# 2. 输入数字指令cmd_num = input("请输入操作: 1.用户注册/ 2.用户登录/ 3.退出程序")# 3. 判断指令,选择分支# 4. 用户注册功能if cmd_num == "1":# print('用户注册')# 4.1 输入注册的用户名reg_name = input('请输入注册的名字:')# 4.2 通过for遍历列表,取出的每个元素是字典for user_dict in user_list:# 4.3 字典['name']和输入注册的用户名比较是否相等if user_dict['name'] == reg_name:# 4.4 如果相等,打印提示:名字在列表中,不允许注册print(reg_name, '名字在列表中,不允许注册')# 4.5 跳出循环break# 4.6 for循环的else,循环里面没有执行到break,则会执行elseelse:# 4.7 输入注册的密码reg_pwd = input('请输入注册的密码:')# 4.8 创建一个字典user_dict = {'name': reg_name, 'pwd': reg_pwd}# 4.9 字典追加到列表中user_list.append(user_dict)# 4.10 打印:注册成功print('注册成功')# 5. 用户登陆功能elif cmd_num == "2":# print('用户登录')# 5.1 输入登陆的用户名和密码login_name = input('请输入登录用户名:')login_pwd = int(input('请输入登录密码:')) # 密码要转换为整型# 5.2 通过for遍历列表,取出的每个元素是字典for user_dict in user_list:# 5.3 字典['name']和登陆用户名比较 and 字典['pwd']和登陆密码比较if user_dict['name'] == login_name and user_dict['pwd'] == login_pwd:# 5.4 如果都相等,打印提示:登陆成功print('登陆成功')# 5.5 跳出循环break# 5.6 for循环的else,循环里面没有执行到break,则会执行elseelse:# 5.7 打印:用户名或密码错误,请重新登陆print('用户名或密码错误,请重新登陆')elif cmd_num == "3":print('退出程序')breakelse:print("输入错误,重新输入")
4. 字符串
4.1 简介
1. 定义
- 字符串就是一串字符,是编程语言中表示文本的数据类型
- 可以使用索引获取一个字符串中指定位置的字符,索引计数从0开始
- 也可以使用for循环遍历字符串中每一个字符
"""
字符串变量 = '字符串内容'
说明:可以是单引号、双引号、三引号"""
my_str = 'python'
# 012345# 取某个元素,和列表一样
print(my_str[0])# 遍历取所有元素
for c in my_str:print(c)
2. 表示
- 在 Python 中可以使用**一对双引号
"
或者 一对单引号'
或者 一对三引号'''
定义一个字符串
str1 = 'python'
str2 = "python"
str3 = """python"""
str4 = '''python''
4.2 f-strings 字符串格式化
f-strings
是Python 3.6之后的一种新的字符串格式化方法,要使用f-strings,只需在字符串前加上f、或F:
name = 'mike'
age = 34
sex = 'male'# 传统方式格式化
print('我叫%s, 年龄为%d, 性别为:%s' % (name, age, sex))# 和上面打印效果一样
print(f'我叫{name}, 年龄为{age}, 性别为:{sex}')
print(F'我叫{name}, 年龄为{age}, 性别为:{sex}')
4.3 常用操作
4.4 切片
1. 简介
- 切片 译自英文单词
slice
,翻译成另一个解释更好理解: 一部分
2. 作用
- 切片使用索引值来限定范围,根据步长 从原序列中取出一部分元素组成新序列
3. 应用场景
- 切片方法适用于字符串、列表、元组
字符串[开始索引:结束索引:步长]
注意:
- 指定的区间属于左闭右开型
[开始索引, 结束索引)
对应开始索引 <= 范围 < 结束索引
- 从
起始
位开始,到结束
位的前一位结束(不包含结束位本身)
- 从
- 从头开始,开始索引数字可以省略,冒号不能省略
- 到末尾结束,结束索引数字和冒号都可以省略
- 步长:理解为走的步数,正数说明是从左往右,负数是从右往左,默认步长为+1
步长默认为1
,如果元素连续,数字和冒号都可以省略
4. 应用
需求:
- 截取从 2 ~ 5 位置 的字符串
- 截取从 2 ~ 末尾 的字符串
- 截取从 开始 ~ 5 位置 的字符串
- 从开始位置,每隔一个字符截取字符串
- 截取字符串末尾两个字符
- 字符串的逆序
思路:
"""
字符串[开始位置:结束位置:步长]
0. 步长默认为1,步长理解为走几步
1. 字符串[开始位置:结束位置] 开始位置 ~(结束位置-1)
2. 字符串[开始位置: ] 开始位置 ~ 结束位置,末尾位置不写,默认能取到末尾那个位置
3. 字符串[ :结束位置] 0 ~(结束位置-1),开始位置不写,默认从第0个元素开始
"""
实现:
temp_str = "abcdefgh"
# "a b c d e f g h"
# 0 1 2 3 4 5 6 7
# -7 -6 -5 -4 -3 -2 -1# 截取从 2 ~ 5 位置 的字符串
print(temp_str[2:6])# 截取从 2 ~ 末尾 的字符串
print(temp_str[2:])# 截取从 开始 ~ 5 位置 的字符串
print(temp_str[0:6])
print(temp_str[:6])# 从开始位置,每隔一个字符截取字符串,也就是说走2步
print(temp_str[::2])# 截取字符串末尾两个字符
print(len(temp_str)-2) # len(temp_str)获取字符串的长度
print(temp_str[len(temp_str)-2:])
print(temp_str[-2:])# 字符串的逆序(面试题)
print(temp_str[::-1])
5. 集合
5.1 简介
1. 定义
- 集合用
{}
定义,元素 之间使用,
分隔
2. 作用
- 可通过集合对列表中的元素完成去重功能
set(列表)
# 集合:元素不会重复,{元素1,元素2……}
# 定义集合
my_set = {1, 2, 1, 2, 1, 2}
print(my_set) # {1, 2}
print(type(my_set)) # <class 'set'># 通过集合完成对列表去重功能
name_list = ['mike', 'yoyo', 'mike']
# set(name_list):给列表转换为set类型,即可完成去重功能
temp_set = set(name_list)
print(temp_set) # {'mike', 'yoyo'}
6. 类型转换
6.1 简介
6.2 应用
# 列表转元组、集合 类型
my_list = [1, 2, 3, 5, 3, 5]# 列表转换为元组类型
my_tuple = tuple(my_list)
print(my_tuple) # (1, 2, 3, 5, 3, 5)# 列表转换为集合类型
my_set = set(my_list)
print(my_set) # {1, 2, 3, 5}print('============华丽分割线============')# 元组转列表、集合 类型
my_tuple = (1, 2, 3, 5, 3, 5)# 元组转换为列表 类型
my_list = list(my_tuple)
print(my_list) # [1, 2, 3, 5, 3, 5]# 元组转换为集合 类型
my_set = set(my_tuple)
print(my_set) # {1, 2, 3, 5}print('============华丽分割线============')# 集合转元组、列表 类型
my_set = {1, 2, 3}# 集合转换为列表 类型
my_list = list(my_set)
print(my_list) # [1, 2, 3]# 集合转换为元组 类型
my_tuple = tuple(my_set)
print(my_tuple) # (1, 2, 3)
7. 公共语法
公共语法为大部分容器类型的通用方法
7.1 Python 内置函数
Python 包含了以下内置函数:
7.2 切片
7.3 运算符
注意
in
在对字典操作时,判断的是字典的键in
和not in
被称为 成员运算符
更多推荐
容器类型
发布评论