使用生成器函数迭代迭代[duplicate]

问题描述 投票:0回答:1

即时通讯面对这个问题,我希望你们中的一些人可以提供帮助:

编写一个接受可迭代和正数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个回答
0
投票

尝试初始化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)
© www.soinside.com 2019 - 2024. All rights reserved.