如何使for循环在无法达到预定数量时返回填充行?

2023-12-28

我正在刮n来自“a、b、c、d”源的相同类型数据的迭代,但有时这些数据源之一将返回小于n值,因为它没有太多可以提取的值(例如我将设置limit=5, but c将只有 3 个值可供抓取)。

问题是我通过跳过每个列表来组织返回的数据nth 值,因此如果其中一个在无法提取任何内容时不返回至少一个空填充行,则会弄乱模式。


您可以为生成器编写一个包装器来保证结果,即使该结果是None:

def get_result(source, fillvalue=None):
    return next(source, fillvalue)

>>> iterator = iter([1, 2, 3])
>>> [get_result(iterator) for _ in range(5)]
[1, 2, 3, None, None]

或者,通过强制长度的函数传递 5 个结果的块

def enforce_length(n):
    def wrapped(lst):
        for _ in range(n):
            yield next(lst, None)

    return wrapped

enforce_length_5 = enforce_length(5)

>>> list(enforce_length_5([1, 2, 3]))
[1, 2, 3, None, None]

然而,通过稍微重新组织代码,可能会有更好的解决方案。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使for循环在无法达到预定数量时返回填充行? 的相关文章

随机推荐