请稍候,加载中....

推导式与生成式

推导式与生成式语句可以为我们编程带来很大的便利

列表推导式

创建列表除了可以显式的列出所有列表成员以外,还可以通过循环来创建列表成员

列表推导式示例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")]

 

 


Python学习手册-