【发布时间】:2019-12-08 06:06:19
【问题描述】:
我正在解决 stuy 的编码问题中的一个问题,并遇到了这个问题。
因此,给定两个生成器,每个生成器都以升序输出数字,将两个生成器合并为一个生成器,该生成器以升序输出数字。如果出现重复,则输出出现的次数。
我的尝试:由于我更熟悉使用列表、元组、字典等,我想我只是创建一个助手来在生成器中创建项目列表。然后我会合并这两个列表并对其进行排序
def list_maker(gener):
l1 = []
for item in gener:
l1.append(item)
return l1
def merge_gens(first_gen, second_gen):
first_list = list_maker(first_gen)
second_list = list_maker(second_gen)
first_list.extend(second_list)
final_list = first_list
final_list.sort()
yield from final_list
虽然这种方法似乎适用于有限生成器,但它不适用于无限生成器(我忘了说明)。我显然不能列出无限项。我可以在不导入 python 库的情况下获得有关如何执行此操作的帮助吗?
【问题讨论】:
-
你的list-maker功能是不必要的,只需使用
list(some_generator) -
你的任务是实现一个有效的排序。而不是你刚刚打电话给
list.sort。换句话说,你没有做任何被要求的事情。阅读有关生成器和迭代器的信息,然后尝试实现它,并且只有在您尝试过某些东西时,才针对特定问题寻求帮助。 -
我同意@zvone。鉴于我们在这里掌握的信息,我认为可以肯定地说他们不希望你只去
sorted(list(gen_1)+ list(gen_2))或sorted([*gen_1, *gen_2])。
标签: python sorting iterator generator