1. 推导式简介
推导式是一种可高效创建列表、字典、集合及其他可迭代对象的方式。以下将用推导式对多种可迭代对象进行创建。
2. 推导式创建列表
2. 1 复制列表中的元素到新的列表
list1 = [1, 2, 3, 4, 5, 6, 7, 8]
# 常规代码形式
list2 = []
for i in list1:
list2.append(i)
print(list2)
# 推导式形式
list2 = [i for i in list1]
print(list2)
运行结果如下图所示:
2.2 对列表元素进行修改:将列表中的所有元素都乘3
list1 = [1, 2, 3, 4, 5, 6, 7, 8]
# 常规代码形式
list2 = []
for i in list1:
i = i * 3
list2.append(i)
print(list2)
# 推导式形式
list2 = [i * 3 for i in list1]
print(list2)
运行结果如下图所示:
2.3 对列表元素进行筛选及修改:筛选出所有的偶数、能被3整除的数并取其平方
list1 = [1, 2, 3, 4, 5, 6, 7, 8]
# 常规代码形式
list2 = []
for i in list1:
if i % 2 == 0 or i % 3 == 0:
list2.append(i ** 2)
print(list2)
# 推导式形式
list2 = [i**2 for i in list1 if i % 2 == 0 or i % 3 == 0]
print(list2)
运行结果如下图所示:
2.4 涉及到 else 的推导式写法
当循环语句中仅包含 if 语句时直接将 if 语句及内容写在 for 语句后面即可,但当涉及到 else 时需要将 if ,else 语句写在 for 语句前面。(其实本质上就是三目运算符)
list1 = [1, 2, 3, 4, 5, 6, 7, 8]
# 常规代码形式
list2 = []
for i in list1:
if i % 2 == 0 or i % 3 == 0:
list2.append(i ** 2)
else:
list2.append(0)
print(list2)
# 推导式形式
list2 = [i**2 if i % 2 == 0 or i % 3 == 0 else 0 for i in list1]
print(list2)
运行结果如下图所示:
2.5 以元组形式存储两个列表,并对其元素进行筛选及改变
list1 = [1, 2, 3]
list2 = ['A', 'B', 'C']
# 常规代码形式
list3 = []
for i in list1:
for j in list2:
if i % 2 == 0:
list3.append((i ** 2, j))
print(list3)
# 推导式形式
list3 = [(i ** 2, j) for i in list1 for j in list2 if i % 2 == 0]
print(list3)
运行结果如下图所示:
3. 推导式创建字典
3.1 利用推导式将两个列表创建为一个字典
list1 = [1, 2, 3, 4, 5, 6, 7, 8]
list2 = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H']
# 常规代码形式
dict1 = {}
# list(zip('abcdefg', range(3), range(4)))
# [('a', 0, 0), ('b', 1, 1), ('c', 2, 2)]
list_zip = zip(list1, list2) # list_zip 是一个可迭代对象
for ele1, ele2 in list_zip:
dict1[ele1] = ele2
print(dict1)
# 推导式形式
list_zip = {ele1: ele2 for ele1, ele2 in zip(list1, list2)}
print(list_zip)
运行结果如下图所示:
4. 推导式创建集合
集合特点:无序,唯一(不存在重复元素),所以可以用来快速去除重复元素
list1 = [1, 2, 2, 2, 5, 6, 8, 8]
# 常规代码形式
set1 = set()
for i in list1:
set1.add(i)
print(set1)
# 推导式形式
set1 = {i for i in list1}
print(set1)
运行结果如下图所示: