python itertools循环,没有重复

时间:2015-07-22 09:44:35

标签: python itertools

我设法在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']
就像我使用当前代码

一样

1 个答案:

答案 0 :(得分:1)

以下是一种可能的实现 - 我在生成器函数中添加了一个名为set的{​​{1}},以跟踪我们已经seen编辑过的元素。请注意,这意味着 yield 中的所有元素必须是可以删除的(如果已达到),这不是限制基地iterable

roundrobin