python - 当for循环无法达到预定数量时,如何使循环返回填充线?
问题描述
我正在n
从“a、b、c、d”源中抓取相同类型数据的迭代,但有时这些数据源中的一个会返回小于n
值的值,因为它没有那么多可供提取的值(例如,我将设置limit=5
,但c
只有 3 个值可以从中刮取)。
问题是我通过跳过每个n
th 值来组织列表中返回的数据,因此如果其中一个在无法拉出任何内容时至少没有返回一个空的填充行,它就会弄乱模式。
解决方案
您可以为生成器编写一个保证结果的包装器,即使该结果是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]
但是,通过稍微重新组织您的代码,可能会有更好的解决方案。
推荐阅读
- javascript - 在Angular应用程序中打开的菜单中单击时防止md-menu关闭
- python - 属性错误:“列表”对象没有属性.....
- javascript - 在数组中,如何在javascript中确保元素不重复?
- reactjs - 草图反应?
- c - 将值分配给之前初始化为 NULL 的指针
- c++ - 无法在 C++ 中执行多线程
- nginx - 没有 SSL 的 CloudFlare 中子域上的 www 配置问题
- java - 为什么方法返回列表的大小为零
- angular - Edge 上的 Angular 7.1.1 PWA ServiceWorker 无法加载
- javascript - 无法在 Firefox 上使用异步和等待