前言
- 前面我们学习了字符串(str)、列表(list)、字典(dict)、元祖(tuple)还有集合(set),了解了它们的基本性质,今天我们继续学习这些数据容器的公共方法以及推导式。
一、数据容器的公共方法
- 那我们哪些 运算符 或者 函数 能作用于所有的容器类型呢?下边我们一起来看看
1. 公共运算符
介绍
运算符 | 含义 | 支持的数据容器 |
---|---|---|
+ | 合并 | 字符串,列表,元组 |
* | 复制 | 字符串,列表,元组 |
in | 元素是否存在 | 字符串,列表,元组,字典 |
not in | 元素是否不存在 | 字符串,列表,元组,字典 |
in, not in 在操作字典的时候, 是作用于 键 的,下边也进行了演示
代码演示
"""
# 演示上述的 公共运算符.
# + 合并(拼接), 适用于: 字符串, 列表, 元组.
print('abc' + 'xyz') # abcxyz
print([1, 2, 3] + ['a', 'b', 'c']) # [1, 2, 3, 'a', 'b', 'c']
print((1, 2, 3) + ('a', 'b', 'c')) # (1, 2, 3, 'a', 'b', 'c')
# * 复制, 适用于: 字符串, 列表, 元组.
print('abc' * 2) # abcabc
print([1, 2, 3] * 2) # [1, 2, 3, 1, 2, 3]
print((1, 2, 3) * 2) # (1, 2, 3, 1, 2, 3)
# in 是否包含, 适用于: 字符串, 列表, 元组, 字典.
print('a' in 'abc') # True
print(10 in [1, 2, 3]) # False
print(10 in (10, 2, 3)) # True
print(10 in {10, 2, 3}) # True
print(10 in {1:2, 2:3, 10:5}) # True, 如果判断字典, 则判断的是: 键(key)
print(10 in {1:2, 2:3, 5:10}) # False, 如果判断字典, 则判断的是: 键(key)
print('-' * 30)
# not in 是否不包含, 适用于: 字符串, 列表, 元组, 字典.
print('a' not in 'abc') # Flase
print(10 not in [1, 2, 3]) # True
print(10 not in (10, 2, 3)) # False
print(10 not in {10, 2, 3}) # False
print(10 not in {1:2, 2:3, 10:5}) # False
print(10 not in {1:2, 2:3, 5:10}) # True
2. 公共方法
介绍
函数 | 函数功能简介 |
---|---|
len() | 计算容器中元素个数 |
del 或 del() | 删除 |
max() | 返回容器中元素最大值 |
min() | 返回容器中元素最小值 |
range(star, end, step) | 生成从 start 到 end 的数字,步长为 step,供for循环使用 |
enumerate() | 函数用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在 for 循环当中。 |
1、 如果len()统计字典, 统计的是: 键值对的对数.
2. enumerate() 默认索引是从0开始的, 可以指定 起始索引.
代码演示
# 演示 len() 获取长度的
# 1. 字符串
s1 = 'abc'
print(len(s1)) # 3
# 2. 列表
print(len([1, 2, 3, 4, 5])) # 5
# 3. 字典
print(len({'a': 1, 'b': 2, 'c': 3})) # 3
# 演示 del 删除的
# 1. 字符串.
s1 = 'abc'
del s1
# print(s1) 会报错
# 2. 列表
list1 = [1, 2, 3, 4, 5]
del list1[0]
del (list1[2])
print(list1) # [2, 3, 5]
# 3. 字典
dict1 = {'a': 1, 'b': 2, 'c': 3}
del dict1['a']
del (dict1['c'])
print(dict1) # {'b': 2}
# 演示 max() 最大值
print(max('abcdefg')) # g
print(max([1, 2, 3, 4, 5])) # 5
print(max((1, 2, 3, 4, 5))) # 5
print(max({1, 2, 3, 4, 5})) # 5
print(max({'a': 1, 'b': 2, 'c': 1})) # c 只针对于 键.
# 演示 min() 最小值
print(min('abcdefg')) # a
print(min([1, 2, 3, 4, 5])) # 1
print(min((1, 2, 3, 4, 5))) # 1
print(min({1, 2, 3, 4, 5})) # 1
print(min({'a': 1, 'b': 2, 'c': 1}))# a 只针对于 键.
# 演示 range(start, end, step) 生成指定区间范围的值. 包左不包右.
range(1, 10, 2) # 表示生成 1 到 10 的 奇数
print(range(1, 10, 2)) # 这个打印结果是range(1, 10, 2) 而不是 1,3,5, 7,9 ,因为range函数返回值
for i in range(1, 10, 2):
print(i) # 1,3,5, 7,9
print(list(range(1, 10, 2))) # 把 range() => 列表. # [1, 3, 5, 7, 9]
# 演示 enumerate() 生成列表元素的: 索引 和 值.
list1 = ['a', 'b', 'c', 'd', 'e']
for i in list1:
print(i) # 'a', 'b', 'c', 'd', 'e', 它们的索引分别是: 0, 1, 2, 3, 4
# for i in enumerate(list1):
#print(i) # 默认: 索引是从 0 开始的. # (0, 'a')(1, 'b')(2, 'c')(3, 'd')(4, 'e')
for i in enumerate(list1, 5): # 指定 索引从 5 开始.
print(i) # 把列表元素和其索引封装成元组, 即: (索引, 值)
# 打印结果 (5, 'a')(6, 'b')(7, 'c')(8, 'd')(9, 'e')
二、推导式
- 推导式comprehensions(又称解析式),是Python的一种独有特性。
- 推导式可以从一个数据序列构建另一个新的数据序列(一个有规律的列表或控制一个有规律列表)的结构体
-
分类
- 列表推导式: […]
- 集合推导式: {…}
- 字典推导式: {…}
1. 有没有元组推导式呢? 即: (...)-----有, 但是不叫元组推导式, 叫: 生成器(Generator), 我们在后边的章节再进行讲解
2. 推导式支持 循环嵌套 以及 条件筛选的动作.
1. 列表推导式
介绍
"""
格式: [变量名 for 变量名 in ... if 条件...]
"""
代码演示
# 需求1: 创建1个 0 ~ 9的列表.
# 方式1: 不使用推导式.
list1 = []
for i in range(10):
list1.append(i)
print(list1) # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
# 方式2: 列表推导式.
list2 = [i for i in range(10)] # 效果同上.
print(list2) # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
# 方式3: 类型转换.
list3 = list(range(10))
print(list3) # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
# 需求2: 创建1个 0 ~ 9的 偶数 列表.
# 方式1: 不使用推导式.
list1 = []
for i in range(10):
if i % 2 == 0:
list1.append(i)
print(list1) # [0, 2, 4, 6, 8]
# 方式2: 列表推导式.
list2 = [i for i in range(10) if i % 2 == 0] # 效果同上.
print(list2) # [0, 2, 4, 6, 8]
# 方式3: 类型转换.
list3 = list(range(0, 10, 2))
print(list3) # [0, 2, 4, 6, 8]
# 需求3: 创建列表 => [(1, 0), (1, 1), (1, 2), (2, 0), (2, 1), (2, 2)]
# 提示: 循环嵌套, i的值 1, 2 j的值 0, 1, 2
# 方式1: 普通版, 循环嵌套.
list1 = []
for i in range(1, 3):
for j in range(3):
# print((i, j))
# 把 i 和 j 封装成元组.
# tuple1 = (i, j)
# list1.append(tuple1)
list1.append((i, j))
print(list1) # [(1, 0), (1, 1), (1, 2), (2, 0), (2, 1), (2, 2)]
# 方式2: 列表推导式.
list2 = [(i, j) for i in range(1, 3) for j in range(3)] # 效果同上.
print(list2) # [(1, 0), (1, 1), (1, 2), (2, 0), (2, 1), (2, 2)]
2. 字典推导式
代码演示
# 演示: 字典推导式
# 案例1: 创建1个字典, key是1~5, 值是这个数字的平方.
# 方式1: for, while 手动实现.
dict1 = {}
for i in range(1, 6):
dict1[i] = i ** 2
print(dict1) # {1: 1, 2: 4, 3: 9, 4: 16, 5: 25}
# 方式2: 字典推导式.
# 键值对
dict2 = {i : i ** 2 for i in range(1, 6)}
print(dict2) # {1: 1, 2: 4, 3: 9, 4: 16, 5: 25}
# 案例2: 将两个列表合并为1个字典.
list1 = ['name', 'age', 'gender']
list2 = ['Tom', 20, 'man']
# 方式1: for, while手动实现.
dict3 = {}
for i in range(len(list1)): # i的值: 0, 1, 2
# i 就是 列表中的每个元素的 索引, 把索引对应的值 添加到 字典中即可.
dict3[list1[i]] = list2[i]
print(dict3) # {'name': 'Tom', 'age': 20, 'gender': 'man'}
# 方式2: 字典推导式.
dict4 = {list1[i] : list2[i] for i in range(len(list1))} # i的值:0, 1, 2
print(dict4) # {'name': 'Tom', 'age': 20, 'gender': 'man'}
3. 集合推导式
如果是集合推导式, 推导出来的集合 也是会自动去重的.
代码演示
# 演示: 集合推导式 => 默认具有 元素去重的功能.
# 1. 定义1个列表, 记录一些元素.
list1 = [1, 1, 2]
# 2. 集合推导式实现, 获取的元素值为 上述元素的平方结果.
set2 = {i ** 2 for i in list1} # i的值: 1, 1, 2
print(set2) # {1, 4} 因为集合默认会: 去重.
总结
- 以上就是今天要讲的内容,我们对数据容器的公共方法以及推导式进行了总结。