当无法达到预定数量时,如何制作for-loop返回填充线?

2024-04-25 01:34:40 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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


Tags: 数据类型内容列表模式数据源limit个值
1条回答
网友
1楼 · 发布于 2024-04-25 01:34:40

您可以为生成器编写一个保证结果的包装器,即使该结果是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]

不过,可能有一个更好的解决方案,可以通过稍微重新组织代码来实现

相关问题 更多 >