推导式与生成式语句可以为我们编程带来很大的便利
列表推导式
创建列表除了可以显式的列出所有列表成员以外,还可以通过循环来创建列表成员
列表推导式示例1
# 已有list1列表,生成一个新的列表,每项由list1的每项组成
list1 = [1,2,3,4,5,6]
list2 = []
# 使用迭代语句for... in...
# 复制一个list2
for item in list1:
list2.append(item)
print(list2)
#
# 推导式语句
# 推导式语句还是使用for...in....,但是不用写成缩进语句结构
# 显得比较简洁
list2 = [item for item in list1]
print(list2)
推导式示例2-带条件的推导式
# 从列表list1中推导生成一个新的列表,每项由list1中的偶数项组成
list2 = [item for item in list1 if item % 2==0]
print(list2)
# 从列表list1中推导生成一个新的列表,每项由list1中的偶数项组成,非偶数项部分由0组成
list2 = [item if item%2 == 0 else 0 for item in list1 ]
print(list2)
列表推导式示例3-多条件语句推导式
# 已有list1、list2两组列表
# list3为将list1中的偶数项与list2中的奇数项组成新的列表
list1 = [1, 2, 4, 5]
list2 = [10, 2, 40, 5, 2, 4, 3, 60, 3, 6, 4, 70, 31, 2]
##############################################################
# 使用嵌套for语句完成
list3 = []
for item in list1:
if item % 2 == 0:
for item2 in list2:
if item2 % 2 == 1:
list3.append((item,item2))
print(list3)
###############################################################
# 使用推导式完成
list3 = [(item, item2) for item in list1 if item % 2 == 0
for item2 in list2 if item2 % 2 == 1]
print(list3)
生成式
列表推导式,会返回一个列表,也可以返回一个生成器,只需要把[ ] 更换为( )
# 列表生成式示例
list1 = [1,2,3,4,5,6]
list2 = (item for item in list1)
print(list2)
# list2类型为生成式
# 大型列表通常需要耗费更多的内存
# 使用生成式可以节约内存
import sys
list1 = [item for item in range(10**5)]
list2 = (item for item in list1)
print(sys.getsizeof(list1))
print(sys.getsizeof(list2))
其他数据类型的推导式
其他元组、字典、集合都可以通过推导式创建
# 元组推导式
# 举例: 10以内偶数组成的元组,由于圆括号()为生成式,因此元组列表推导式使用tuple()
tuples = tuple( i for i in range(10) if i%2==0 )
print(tuples)
# 字典推导式
# 举例:以list1项为key,list2项为value对组成的字典
list1 = ["a", "b", "c", "d", "e"]
list2 = [1, 2, 3, 4, 5]
dicts = { key:val for key, val in zip(list1, list2)}
print(dicts)
# 集合推导式
# 创建一个由0~10之间的偶数项组成的集合
# 推导式
sets = {i for i in range(10) if i % 2 == 0}
print(sets)
推导式练习
# 生成一个新列表, 新列表的每一个成员是list1的每个成员的平方
list1 = [1, 2, 3, 4]
# 将list2各项展开为一维列表
list2 = [[1,2,3], [4,5, 6], [7,8,9]]
# 将下面的3个列表的成员推导为一个元组组成的列表, 每个元组都是对应列表的成员组成
list1 = [1, 2, 3]
list2 = ["a", "b", "c"]
list3 = ["A", "B", "C"]
# 生成结果[(1, "a", "A"), (2, "b", "B"), (3, "c", "C")]
讨论区