系列文章目录
第一章 初识python
第二章 变量
第三章 基础语句
第四章 字符串str
第五章 列表list []
第六章 元组tuple ( )
第七章 字典dict {}
第八章 集合set {}
文章目录
- 系列文章目录
- 9.1公共操作
- 运算符
- + 合并
- * 复制
- 判断数据是否存在
- 公共方法
- len()
- del
- max()
- min()
- range
- enumerate
- 容器类型转换
- tuple()
- list()
- set()
- 9.2 推导式
- 列表推导式
- 带if的列表推导式
- 多个for循环实现列表推导式
- 字典推导式
- 集合推导式
9.1公共操作
运算符
运算符 | 描述 | 支持的容器类型 |
---|---|---|
+ | 合并 | 字符串、列表、元组 |
* | 复制 | 字符串、列表、元组 |
in | 元素是否存在 | 字符串、列表、元组、字典 |
not in | 元素是否不存在 | 字符串、列表、元组、字典 |
+ 合并
str1 = "abc"
str2 = "def"
print(type(str1 + str2))
print(str1 + str2)
list1 = [1, 2, 3]
list2 = [10, 20, 30]
print(type(list1 + list2))
print(list1 + list2)
tuple1 = (1, 2, 3)
tuple2 = (10, 20, 30)
print(type(tuple1 + tuple2))
print(tuple1 + tuple2)
字典不支持合并运算
* 复制
str1 = "abc"
list1 = ["hello"]
tuple1 = ("world",)
# *:复制
print(str1 * 5)
print(list1 * 5)
print(tuple1 * 5)
# 打印10个 "-"
print('-' * 10)
判断数据是否存在
str1 = "abc"
list1 = ["hello"]
tuple1 = ("world",)
# *:复制
print(str1 * 5)
print(list1 * 5)
print(tuple1 * 5)
# 打印10个 "-"
print('-' * 10)
公共方法
函数 | 描述 |
---|---|
len() | 计算容器中元素个数 |
del 或 del() | 删除 |
max() | 返回容器中元素最大值 |
min() | 返回容器中元素最小值 |
range(start,end, step) | 生成从start到end的数字,步长为 step,供for循环使用 |
enumerate() | 函数用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在 for 循环当中 |
len()
del
list1 = [10, 20, 66, 30, 99, 50]
del(list1[0])
print(list1) # [20, 66, 30, 99, 50]
del(list1)
print(list1)
set1 = {10, 20, 66, 30, 99, 50}
del(set1)
print(set1)
dict1 = {"name": "意境", "age": 18}
del dict1["age"]
print(dict1)
del(dict1)
print(dict1)
max()
str1 = "abcdefg"
list1 = [10, 20, 66, 30, 99, 50]
print(max(str1)) # g
print(max(list1)) # 99
min()
str1 = "abcdefg"
list1 = [10, 20, 66, 30, 99, 50]
print(min(str1)) # a
print(min(list1)) # 10
range
range(start,end, step)
生成从start到end的数字,步长为 step,供for循环使用 。
类似描述:切片,需要注意的是切片end位置的数据不包含,range也不包含end结束位。start可以省略,默认从0开始。step可以省略,默认步长为1。
# 1 2 3 4 5 6 7 8 9
for i in range(1, 10, ): # range(1, 10, 1)
print(i, end=" ")
print()
# 1 3 5 7 9
for i in range(1, 10, 2):
print(i, end=" ")
print()
# 0 1 2 3 4 5 6 7 8 9
for i in range(10):
print(i, end=" ")
注意: range()生成的序列不包含end数字。
enumerate
enumerate(可遍历对象,start=0)
函数用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在 for 循环当中 。
返回结果是元组,元组第一个数据是原迭代对象的数据对应的下标,元组第二个数据是原迭代对象的数据。
start参数用来设置遍历数据的下标的起始值,默认为0。
list1 = ['a', 'b', 'c', 'd', 'e']
for i in enumerate(list1):
print(i)
拆包:
list1 = ['a', 'b', 'c', 'd', 'e']
for index, value in enumerate(list1, start=1):
print(f'下标{index},对应数据是{value}')
容器类型转换
tuple()
作用:将某个序列转换成元组
list()
作用:将某个序列转换成列表
set()
作用:将某个序列转换成集合
注意:
1.集合可以快速完成列表去重
2.集合不支持下标
9.2 推导式
推导式就是一种更有风格的python代码的一种写法。例如一个需求代码可能要5行,但是我用推导式去书写很可能1行代码就完成了。
列表推导式
作用: 用一个表达式创建一个有规律的列表
或控制一个有规律列表。
列表推导式又叫列表生成式。
例:创建一个0-9的列表
-
while循环实现
-
for循环实现
- 列表推导式去实现
list1 = [ i for i in range(10) ]
print(list1) # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
带if的列表推导式
需求:创建0-9的偶数列表
方法一:range()步长实现
方法二:if 实现
list1 = [i for i in range(10) if i % 2 == 0]
print(list1) # [0, 2, 4, 6, 8]
多个for循环实现列表推导式
需求: 创建列表如下:
[(1, 0),(1,1),(1, 2), (2, 0),(2, 1), (2, 2)]
代码如下:
list1 = [(i, j) for i in range(1, 3) for j in range(3)]
print(list1) # [(1, 0), (1, 1), (1, 2), (2, 0), (2, 1), (2, 2)]
多for的列表推导式等同于for循环嵌套
字典推导式
思考: 如果有如下两个列表
list1 = [‘name’, ‘age’, ‘gender’]
list2 = [‘意境’, 20, ‘man’]
问:如何快速合并为一个字典?
答:字典推导式
字典推导式作用: 快速合并列表为字典或提取字典中目标数据
①创建一个字典: 字典key是1-5数字,value是这个数字的2次方
key:value 的形式
dict1 = {i: i ** 2 for i in range(1, 6)}
print(dict1) # {1: 1, 2: 4, 3: 9, 4: 16, 5: 25}
②将两个列表合并为一个字典
list1 = ['name', 'age', 'gender']
list2 = ['意境', 20, 'man']
dict1 = {list1[i]: list2[i] for i in range(len(list1))}
print(dict1) # {'name': '意境', 'age': 20, 'gender': 'man'}
但是这样写还是有问题的,假如list1和list2长度不一样,会报错IndexError: list index out of range,下标越界的意思
总结:
1.如果两个列表数据个数相同,len统计任何一个列表的长度都可以
2.如果两个列表数据个数不同,len统计数据多的列表数据个数会报错,len统计数据少的列表数据个数不会报错
③提取字典中目标数据
counts = {'MBp': 268, 'HP': 125, 'DELL': 201, 'Lenovo': 199, 'acer': 99}
# 需求: 提取上述电脑数量大于等于209的字典数据
count1 = {key: value for key, value in counts.items() if value >= 200}
print(count1) # {'MBp': 268, 'DELL': 201}
集合推导式
使用几率不高
需求: 创建一个集合,数据为下方列表的2次方
list1 = [1, 2, 1, 3]
list1 = [1, 2, 1, 3]
set1 = {i ** 2 for i in list1}
print(set1) # {1, 4, 9}
注意:集合有数据去重功能