我设法在https://docs.python.org/3.1/library/itertools.html中修改了roundrobin的配方 包含一个限制(到达X元素时停止) - 下面的代码......
现在 - 我真正想要的是“在到达X元素但没有元素重复时停止” 它甚至可能吗? (因为它是一个发电机......)
def roundrobin(limit, *iterables):
"roundrobin('ABC', 'D', 'EF') --> A D E B F C"
# Recipe credited to George Sakkis
pending = len(iterables)
nexts = cycle(iter(it).next for it in iterables)
while pending:
try:
for next in nexts:
yield next()
limit -= 1
if limit == 0:
return
except StopIteration:
pending -= 1
nexts = cycle(islice(nexts, pending))
用以下方式调用它:
candidates = [['111', '222', '333'],['444','222','555']]
list(roundrobin(4, *candidates))
我想得到:
['111,'444','222','333']
而不是:
['111,'444','222','222']
就像我使用当前代码一样
答案 0 :(得分:1)
以下是一种可能的实现 - 我在生成器函数中添加了一个名为set
的{{1}},以跟踪我们已经seen
编辑过的元素。请注意,这意味着 yield
中的所有元素必须是可以删除的(如果已达到),这不是限制基地iterable
。
roundrobin