- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
如果我有多个可迭代对象作为参数,有没有办法让代码在列表之一引发 StopIteration 之后继续运行?
我不能使用任何切片、len() 或任何 itertools。
这是我迄今为止尝试过的方法,我知道这是完全错误的,但我就是想不通。
def together(*args):
iterator = [iter(item) for item in args]
my_list = []
while True:
for i in iterator:
try:
lst.append(next(i))
print(next(i))
except StopIteration:
return
if '__next__' == None:
yield tuple(None)
else:
yield tuple(my_list)
my_list = []
这是我当前的结果,iter do store b,g,i 但它只打印出第一个列表:
[('a', 'f', 'h')]
获得这样结果的最佳方法是什么?结果是列表中的元组,当参数 iterables 用完时,它会被替换为 Nones。
[('a', 'f', 'h'), ('b', 'g', 'i'), ('c', None, 'j'), ('d', None, 'k'), ('e', None, None)]
我知道在 ('b','g','i') 之后会出现 StopIteration 错误,但是有什么方法可以忽略并继续使用不同的列表吗?
输入看起来像:
[v for v in together(disguise('abcde'), disguise('fg'), disguise('hijk'))]
伪装函数如下:
def disguise(items):
for v in items:
yield v
任何建议或帮助将不胜感激!
最佳答案
您可以使用 next
的第二个参数让 next
返回一个默认值,而不是在给定迭代器运行时引发 StopIteration
异常筋疲力尽:
def together(*seqs):
seqs = list(map(iter, seqs))
while True:
group = tuple(next(seq, None) for seq in seqs)
if all(i is None for i in group):
return
yield group
这样:
list(together('abcde', 'fg', 'hijk'))
返回:
[('a', 'f', 'h'), ('b', 'g', 'i'), ('c', None, 'j'), ('d', None, 'k'), ('e', None, None)]
关于python - 如何创建一个生成器在 StopIteration 之后继续运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54583540/
我正在编写从 azure DevOps 下载大型审计日志 csv 文件并根据给定条件过滤数据的脚本。这适用于小 csv 文件,但对于具有大数据的文件,它会失败 字段 = 下一个(读者) 停止迭代 有人
这是我的代码 class A: pass def f(): yield A() def g(): it = f() next(it).a = next(it, None
以下是 Jean 对我的问题的回答:Python converting strings in a list to numbers ,运行下面的最小代码时出现 StopIteration 异常。 pri
我正在 Python 中实现一个迭代器,它包装另一个迭代器,并在传递迭代器的输出之前对其输出进行后处理。下面是一个简单的示例,它采用一个返回字符串的迭代器,并在每个字符串前面添加 FILTERED B
看看这个,问题的症结在最下面: >>> scan = iter('FHUR203459') >>> while True: print(next(scan)) F H U R 2 0
我想编写一个生成器,它可以接受来自产量的有限数量的输入,然后优雅地处理更多输入。捕获 StopIteration 的最佳方法是什么? 我尝试使用内部生成器与外部生成器进行包装,使用 try- exce
为什么这段代码抛出“StopIteration”: stub_generator = (x for x in range(5)) stub_dict = {} stub_dict[next(stub_
我有一个生成器,我想确认它已经结束(在程序的某个点。我在 python 2.7 中使用 unittest # it is a generator whould have only one item i
为什么多次调用耗尽的生成器时,StopIteration 每次都会引发,而不是仅在第一次尝试时引发?后续调用不是没有意义,并表明调用方代码中可能存在错误吗? def gen_func(): y
当迭代器耗尽时,最后一次从迭代器返回某些东西的好方法是什么。我正在使用一个标志,但这相当丑陋: class Example(): def __iter__(self): sel
我想从一个 csv 文件中读取最多 20 行: rows = [csvreader.next() for i in range(20)] 如果文件有 20 行或更多行则工作正常,否则会失败并出现 St
灵感来自 my own answer ,我什至不明白它是如何工作的,请考虑以下内容: def has22(nums): it = iter(nums) return any(x ==
我有一个 generator检查列表中某个条件的对象。这个程序适用于我的所有情况。 但我只想澄清一些关键点。 在我的程序中每当generator yield值 'No'或 'Done'控制迭代停止并调
我需要捕获 next(it) 抛出的异常,因此在这种情况下我无法使用常规的 for 循环。所以我写了这段代码: it = iter(xrange(5)) while True: try:
我的作业代码遇到了一些问题,我应该浏览一个文本文件并找到四月份的生日并打印它们。文本文件如下所示: 鲍勃,6 月 10 日 乔,4 月 12 日 苏,7 月 22 日 我应该检查一下并打印出四月份的姓
我正在使用 yield from,但我不知道 while 对 yield 的影响。如果我将 yield from 放入 while 循环中,效果很好,但是当我同时取消循环时,会发生异常。 final_
我想遍历两个不同大小的列表,但速度不同(我只找到了并行迭代的答案)。例如,考虑两个包含相同类型元素的排序列表,我想根据它们只在一个列表或两个列表中的事实对元素执行某些操作,使用两个列表的公共(publ
我正在编写一个从文件接收输入的程序,每一行都可能包含“ATG”或“GTG”,我很确定我所做的一切都是我想做的。这是我第一次在 python 中使用生成器,在研究了这个问题之后,我仍然不知道为什么我会停
我有一个函数可以使用生成器计算毕达哥拉斯三元组。但是,当我调用 next(myfunc()) 时,它会抛出此错误: Traceback (most recent call last): File
如果我有多个可迭代对象作为参数,有没有办法让代码在列表之一引发 StopIteration 之后继续运行? 我不能使用任何切片、len() 或任何 itertools。 这是我迄今为止尝试过的方法,我
我是一名优秀的程序员,十分优秀!