美文网首页
01.08 笔记 - 生成式

01.08 笔记 - 生成式

作者: xxxQinli | 来源:发表于2019-01-08 16:59 被阅读0次

1.什么是生成式

生成式就是生成器的一种特殊写法


2.写法

  • a.
    生成器 = (表达式 for 变量 in 序列) --> 让变量去序列中取值,每取一个值就将对应的表达式的值作为生成器的元素

def 函数名():
for 变量 in 序列:
yield 表达式

  • b.
    生成器 = (表达式 for 变量 in 序列 if 条件语句)

def 函数名():
for 变量 in 序列:
if 条件语句:
yield 表达式

gen1 = (x*2 for x in 'abc123')
print(gen1)
print(next(gen1))
print(next(gen1))
print(next(gen1))


# 这个是生成式(x*2 for x in 'abc123')展开成生成器的写法
def func1():
    for x in 'abc123':
        yield x*2


gen2 = ((value, key) for key, value in {'name': 'xiaoming', 'age': 10}.items())
print(next(gen2))   # ('xiaoming', 'name')
print(next(gen2))   # (10, 'age')

def func2():
    for key, value in {'name': 'xiaoming', 'age': 10}.items():
        yield (value, key)


gen3 = (x for x in range(10) if x&1)
print(next(gen3))   # 1
print(next(gen3))   # 3
print(next(gen3))   # 5


def func3():
    for x in range(10):
        if x & 1:
            yield x

3.将迭代器和生成器转换成其他序列

list1 = list(gen3)
print(list1)    # [7, 9]

# print(next(gen3))   # StopIteration

gen5 = (x.upper() for x in '12as67sj2is8' if 'a'<=x<='z')
# list2 = list(gen5)
# # print(list2)
def yt_list(seq):
    new = []
    for x in seq:
        new.append(x)
    return new

list2 = yt_list(gen5)
print(list2)
# print(next(gen5))   # StopIteration

# [生成式] -> 直接将生成式对应的生成器转换成列表
list3 = [x.upper() for x in '12as67sj2is8' if 'a' <= x <= 'z']
print(list3)

# 练习: 交换字典的key和value的位置
dict1 = {'a': 1, 'b': 2, 'c': 3}
result = dict((x, y) for y, x in dict1.items())
print(result)

相关文章

  • 01.08 笔记 - 生成式

    1.什么是生成式 生成式就是生成器的一种特殊写法 2.写法 a.生成器 = (表达式 for 变量 in 序列) ...

  • Generative Adversarial Nets(译)

    生成式对抗网络 友情提示: <生成式对抗网络>论文笔记 ...

  • Generative Adversarial Nets

    生成式对抗网络 友情提示: <生成式对抗网络>论文笔记 & 代码解析可参考如下网址 http://blog.csd...

  • python 高级特性之列表生成式

    python学习笔记,特做记录,分享给大家,希望对大家有所帮助。 列表生成式 列表生成式即List Compreh...

  • 01.08 笔记 - 文件

    1.数据本地化和数据持久化 将数据以文件的形式存到计算机硬盘中(程序中保存的数据,当程序运行结束会自动销毁) 2....

  • 列表生成式和字典生成式

    列表生成式 字典生成式

  • python 生成式

    1. 列表生成式 2. 字典生成式 3. 集合生成式

  • 01.08

    癫痫持续状态用药 感觉神经元病 感觉神经病

  • 01.08

    如果跟一个不喜欢的人过一辈子,我宁愿一个人过。如果让我喜欢的人跟我一起受苦,我宁愿一个人过。现在的自己勉强糊口,拿...

  • 01.08

    时间过的好快…

网友评论

      本文标题:01.08 笔记 - 生成式

      本文链接:https://www.haomeiwen.com/subject/rjjbrqtx.html