1 2 3 4

【python之路48】生成器表达式、推导式

 

一、生成器表达式

1、 生成器表达式为:

(结果 for 变量 in 可迭代的对象 if 条件)--》if条件可以省略

 

ge = (i for i in range(1, 11))
print(ge)  # <generator object <genexpr> at 0x0000023EA176B5C8>

for elment in ge:
    print(elment)  # 结果从1打印到10


# # 实际相当于
# def ge():
#     for i in range(1, 11):
#         yield i
# 
# for i in ge():
#     print(i)

 

二、推导式

1、列表推导式

[结果 for 变量 in 可迭代的对象 if 条件]        --》if条件可以省略

li = [i for i in range(1,11)]
print(li)  #[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

li2 = [i for i in range(1,11) if i % 2 == 0]
print(li2) #[2, 4, 6, 8, 10]

2、字典推导式

[key:value for 变量 in 可迭代的对象 if 条件}        --》if条件可以省略

li1=["黑旋风","花和尚","豹子头","行者"]
li2=["李逵","鲁智深","林冲","武松"]

dic = {li1[i]:li2[i] for i in range(len(li1))}
print(dic)

#打印结果
#{'黑旋风': '李逵', '花和尚': '鲁智深', '豹子头': '林冲', '行者': '武松'}

3、集合推导式

{结果 for 变量 in 可迭代的对象 if 条件}        --》if条件可以省略}

se = {i for i in range(1,11)}
print(se)  #{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}

4、注意:没有元组推导式,元组推导式的格式被生成器表达式占用


补充列表推导式:

# 写程序生成下面的序列:
# [[0, 0, 0, 0, 0], [0, 1, 2, 3, 4], [0, 2, 4, 6, 8], [0, 3, 6, 9, 12]]

# 有N中方法,下面一种方法,分别用循环和列表推导式的方式实现

# li = []
# for r in range(4):
#     #0-4
#     li.append([])
#     for c in range(5):
#         li[r].append(r * c)
# print(li)

re =[[r*c for c in range(5)] for r in range(4)]
print(re)
posted @ 2020-03-03 21:57  I我的博客I  阅读(291)  评论(0编辑  收藏  举报