用于在迭代期间处理集修改的Pythonic设计

时间:2018-05-05 16:41:55

标签: python loops set iteration traversal

我正在使用集合进行一种图形遍历。

我有一个nodedict(set)节点键,该组包含图中关键节点有边缘的其他节点。

在我的遍历中,我查找给定节点的两个不同边。如果它们通过边缘连接,我将它们断开连接。如果它们未连接,我将它们连接起来并断开它们与当前节点的连接。类似的东西:

for e1 in edgemap[curr]:
    for e2 in edgemap[curr]:
        if e1 != e2:
            if e1 in edgemap[e2]:
                edgemap[e2].remove(e1)
                edgemap[e1].remove(e2)
            else:
                edgemap[e1].add(e2)
                edgemap[e2].add(e1)
                edgemap[curr].remove(e1)
                edgemap[curr].remove(e2)

当然,这段代码根本不起作用。我在迭代期间修改了一个集合。通常,当我想进行修改时,我会迭代edgemap [_] .copy()。 但是,在这种情况下,我实际上希望修改立即生效..所以如果" else"条件已执行,使用此设计,我们需要打破for循环并重新开始。

目前我想我会用这个:

while 1:
    match = False
    for e1 in edgemap[curr].copy():
        for e2 in edgemap[curr].copy():
            if e1 != e2:
                match = True
                if e1 in edgemap[e2]:
                    edgemap[e2].remove(e1)
                    edgemap[e1].remove(e2)
                else:
                    edgemap[e1].add(e2)
                    edgemap[e2].add(e1)
                    edgemap[curr].remove(e1)
                    edgemap[curr].remove(e2)
                    edgemap[e1].remove(curr)
                    edgemap[e2].remove(curr)

                break
        if match:
            break

但我仍然是一个初学程序员......这感觉真的很尴尬。有没有更好的方法可以设计它?

0 个答案:

没有答案