Python:使用next和iter检测循环,缩小集

时间:2018-05-31 14:46:58

标签: python iterator depth-first-search next

我跟随Tushar Roy的video检测有向图中的周期。我理解使用白色,灰色和黑色设置来检测周期,但我不了解的主要问题是我们如何检查white集的长度,next(iter(white))因为设定的尺寸已经改变,所以会知道下一步该去哪里。文档说iter为您提供了一个迭代器对象,next将检索下一个项目。迭代器每次都被评估的主要观点是什么?

您可以找到代码herehere

def has_cycle(graph):
    white = set()
    gray = set()
    black = set()

    for vertex in graph.all_vertex.values():
        white.add(vertex)

    while len(white) > 0:
        current = next(iter(white))       
        if dfs(current, white, gray, black) == True:
            return True

    return False        

def dfs(current, white, gray, black):
    move_vertex(current, white, gray)
    for neighbor in current.adjacent_vertices:
        if neighbor in black:
            continue
        if neighbor in gray:
            return True
        if dfs(neighbor, white, gray, black) == True:
            return True

    move_vertex(current, gray, black)
    return False

def move_vertex(vertex, source_set, destination_set):
    source_set.remove(vertex)
    destination_set.add(vertex)

1 个答案:

答案 0 :(得分:1)

next(iter(white))只返回集合white的元素。未订购集合,因此无法保证选择哪个元素。您认为迭代器是针对循环的每次迭代进行评估的。

随着循环的进行,集合发生变化的事实禁止使用for循环。