推导式
- 推导式概念:
- 推导式(comprehesions 又称解析式),是Python的一种独有特性,推导式是可以从一个数据序列构建另一个新的数据序列的结构体。
推导式的种类
- 推导式共有三种:
- 1.列表(list)推导式:用于创建新的列表
- 2.字典(dict)推导式:用于构建字典
- 3.集合(set)推导式:用于生成集合
- 每种类型的推导式都有其特定的用途和语法结构
列表推导式(List Comprehesions)
列表推导式是最常用的推导式类型。
它们用于从现有的列表或任何可迭代对象创建一个新的列表。
基本语法:
new_list = [expression for item in iterable if condition]
格式:
new_lsit = [表达式 for 变量 in 列表 if 条件]
参数:
- expression 是对itme的操作或处理方式
- for item in iterable 是一个循环,遍历每个元素
- if condition 是一个可选的过滤器,只有符合条件的元素才被处理
示例:
- 过滤掉长度小于或等于3的字符串列表,并将剩下的转换成大写字母
names = ["Bob", "Tom", "alice", "Jerry", "Smith"]
new_names = [name.upper() for name in names if len(names) > 3]
print(new_names)
# result: ['BOB', 'TOM', 'ALICE', 'JERRY', 'SMITH']
- 创建一个新列表,其中包含原列表中每个数字的平方,其中参数%2为零的过滤出来
numbers = [1, 2, 3, 4, 5]
new_number = [i * i for i in numbers if i % 2 == 0]
print(new_number)
# result: [4, 16]
字典推导式(Dict Comprehersions)
字典推导式用于从键值对序列中创建字典,这在处理数据转换是非常有用
基本语法:
new_dict = {key_expression: value_expression for item in iterable if condition}
示例:
- 两个列表,其中一个列表存储名字,另一个列表存储年龄,把它们转换成字典,其中名字是键,年龄是值
list_name = ["Bob", "Tom", "alice", "Jerry", "Smith"]
list_age = [22, 24, 21, 19, 27]
# 使用zip高阶函数将两个列表中对应下标的值一一组合成一个元祖
new_dict = {name: age for name, age in zip(list_name, list_age)} # ('Bob', 22), ('Tom', 24), ('alice', 21), ('Jerry', 19), ('Smith', 27)
print(new_dict)
# result:{'Bob': 22, 'Tom': 24, 'alice': 21, 'Jerry': 19, 'Smith': 27}
- 使用字符串及其长度创建字典
list_name = ["Bob", "Tom", "alice", "Jerry", "Smith"]
new_dict = {i: len(i) for i in list_name}
print(new_dict)
# result:{'Bob': 3, 'Tom': 3, 'alice': 5, 'Jerry': 5, 'Smith': 5}
- 提供三个数字,以三个数字为键,三个数字的平方为值
num = [2, 4, 6]
new_dict = {n: n * n for n in num}
print(new_dict)
# result:{2: 4, 4: 16, 6: 36}
- 提供三个数字,以key字符串+数字为键,三个数字的平方为值
num = [3, 5, 7]
new_dict = {'key%s' % i: i * i for i in num}
print(new_dict)
# result:{'key3': 9, 'key5': 25, 'key7': 49}
集合推导式(Set Comprehersions)
集合推导式与列表推导式类似,但是他们创建的是集合(set),这意味着结果中不会有重复的元素。
基本语法:
new_set = {expression for item in iterable if condition}
示例:
- 创建一个集合,将原始列表中的元素添加到集合中
init_list = [1, 2, 2, 3, 4, 4, 5]
new_set = {x for x in init_list}
print(new_set)
# result:{1, 2, 3, 4, 5}
# 集合推导式自动祛除了重复的元素,只保留了原始列表中的不同元素