处理迭代过程中集合修改的Python设计

2024-06-16 13:36:38 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在用集合做一种图遍历

我有一个节点键的defaultdict(集合),该集合包含图中键节点有边的其他节点

在遍历过程中,我查找给定节点的两条不同边。如果它们通过边连接,我将断开它们。如果它们未连接,我将连接它们并断开它们与当前节点的连接。比如:

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[\uz].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

但是我仍然是一个初学者。。这感觉真的很尴尬。有没有更好的方法来设计这个


Tags: inaddforif节点过程matchelse