为了账号安全,请及时绑定邮箱和手机立即绑定

如何在一个周期内使用生成器输出和列表?

如何在一个周期内使用生成器输出和列表?

跃然一笑 2023-07-05 16:13:46
my_list = [1,2,3]def my_gen():    yield 4    yield 5    yield 6for i in my_list:  print(i) # 1,2,3for i in my_gen():  print(i) # 4,5,6下一个周期如何实施?我期望得到:1,2,3,4,5,6for i in [my_list, my_gen()]:  print(i) # 1, 2, 3 <generator object my_gen...> -> 1,2,3,4,5,6
查看完整描述

4 回答

?
慕容3067478

TA贡献1773条经验 获得超3个赞

有一个用于此目的的助手:itertools.chain

for i in itertools.chain(my_list, my_gen()):
    print(i)

注意:还有一个类似的函数用于聚合对地图(dicts,...)的访问ChainMap


查看完整回答
反对 回复 2023-07-05
?
温温酱

TA贡献1752条经验 获得超4个赞

如果您想要相同的输出,可以将生成器转换为列表。


但这还不够,因为您将打印列表本身,而不是其中的值。


您需要的是解压列表,并在 for 循环中使用它。


my_list = [1,2,3]


def my_gen():

    yield 4

    yield 5

    yield 6


for i in [*my_list, *list(my_gen())]:

  print(i)


查看完整回答
反对 回复 2023-07-05
?
临摹微笑

TA贡献1982条经验 获得超2个赞

for i in zip(my_list, my_gen()):
  print(*i)

说实话,我不太明白你的问题。请更好地解释一下自己。

编辑:是*解压函数zip()创建的元组。


查看完整回答
反对 回复 2023-07-05
?
拉莫斯之舞

TA贡献1820条经验 获得超10个赞

语法是一个相当未知的功能yield from,它允许将要生成的元素委托给另一个生成器。这样做的优点是不转换my_gen为列表。例如:


my_list = [1, 2, 3]


def my_gen():

    yield 4

    yield 5

    yield 6


def my_final_gen():

    yield from my_list

    yield from my_gen()


for x in my_final_gen():

    print(x)


查看完整回答
反对 回复 2023-07-05
  • 4 回答
  • 0 关注
  • 193 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号