【问题标题】:iterating over an iterable using generator function [duplicate]使用生成器函数迭代可迭代对象[重复]
【发布时间】:2023-03-20 11:38:01
【问题描述】:

我正面临这个问题,我希望你们中的一些人可以帮忙:

编写一个接受可迭代和正数 n 的函数。该函数返回一个新的迭代器,它以长度为 n 的元组给出原始值。如果最后一个元组需要,用“None”填充缺失值。

例如:

for x in bunch_together(range(10),3): print(x)

返回值为

(0, 1, 2) (3, 4, 5) (6, 7, 8) (9, None, None)

这是我目前想出的:

def bunch_together(iterable,n):
    tup = tuple()
    for item in iterable:
        for i in range(n):
            tup += (i,)
        yield tup

但这显然不起作用,因为我根本没有考虑范围(现在的输出看起来像这样:

(0, 1, 2)
(0, 1, 2, 0, 1, 2)
(0, 1, 2, 0, 1, 2, 0, 1, 2)
...#(goes on)

我可以创建一个生成器来构建一个迭代器(就像构建一个由 init iter 和 next 组成的类) 谢谢您的帮助!

【问题讨论】:

标签: python iterator generator yield iterable


【解决方案1】:

尝试在for循环中初始化元组

def bunch_together(iterable,n):

    for k in range(0,len(iterable),n):
        tup = tuple()
        for i in range(k,k+n):
            tup += (iterable[i] if i<len(iterable) else None,) # condition to check overflow
        yield tup

for x in bunch_together(range(10),3): 
    print(x)

输出

(0, 1, 2)
(3, 4, 5)
(6, 7, 8)
(9, None, None)

【讨论】:

    猜你喜欢
    • 2017-12-18
    • 2018-05-24
    • 2012-04-27
    • 1970-01-01
    • 1970-01-01
    • 2018-08-16
    • 2018-05-16
    • 2018-08-19
    • 2020-06-29
    相关资源
    最近更新 更多