Aru*_*run 4 python random iterator
假设我有一个迭代器列表:
iterators = [ iter([2, 3, 4]), iter([7, 9]), iter([-1, -2, -3, -4]) ]
Run Code Online (Sandbox Code Playgroud)
如何使用上述迭代器创建一个新的迭代器,以便在每一步都会随机选择列表中存在的迭代器(尚未完成)并从中输出下一个元素?它应该继续输出元素,直到所有迭代器完成。
因此,例如,如果新的迭代器是it_combined,我在尝试迭代它时可能会得到以下输出
>>> for it in it_combined:
... print(it, end=" ")
...
2 7 3 -1 4 -2 -3 -4 9
Run Code Online (Sandbox Code Playgroud)
您可以使用random.choice它从列表中随机选择迭代器。然后,您必须确保在用完该迭代器后从列表中删除它。
您可以使用 agenerator来实现迭代器的合并/采样:
import random
random.seed(42)
def combine_iterators(iterators):
while iterators:
it = random.choice(iterators)
try:
yield next(it)
except StopIteration:
iterators.remove(it)
merged_iterator = combine_iterators(
[iter([2, 3, 4]), iter([7, 9]), iter([-1, -2, -3, -4])]
)
for x in merged_iterator:
print(x, end=" ")
Run Code Online (Sandbox Code Playgroud)
输出:
-1 2 3 -2 7 4 9 -3 -4
Run Code Online (Sandbox Code Playgroud)