首页 > 解决方案 > 如何使用 Python 中的类制作快速查找算法并返回列表集作为结果

问题描述

我想使用 python 类制作一个快速查找算法。我不确定如何返回最终数据集。在连接变量设置如下的地方,我想返回最终结果:

N = 10
connections = [(4,3), (3,8)]
result = [0,1,2,8,8,5,6,7,8,9]

类代码是:

class QuickFind(object):
    def __init__(self, N):
        self.lst = list(range(N))

    def union(self, a, b):
        old = self.lst[a]
        new = self.lst[b]
            for ind in self.lst:
            if ind == old:
                self.lst[ind] = new

# execution code is:
for i, j in connections:
    QuickFind(10).union(i, j)

... some code ...

print(result)

标签: pythonalgorithm

解决方案


您的代码当前正在QuickFind为循环的每次迭代创建一个实例 over connections,但随后它会丢弃该对象。如果您想union在同一个对象上完成所有调用,并且希望之后能够看到结果,则需要更改它以便只创建一个对象,并将对它的引用存储在一个变量中.

尝试这样的事情:

qf = QuickFind(10)

for i, j in connections:
    qf.union(i, j)

...

result = qf.lst
print(result) # or combine these lines into print(qf.lst)

的实施也存在问题unionind您从循环中获取的变量名称有点误导,因为它不是索引,而是列表中的值。在if语句期间,您将其正确地视为一个值(将其与 比较old,这也是一个值),但在之后的赋值中,您将其用作索引。我认为你确实需要一个值和一个索引,所以我建议重写循环以使用enumerate,以便在需要时拥有每一个:

for i, val in enumerate(self.lst):
    if val == old:
        self.lst[i] = new

推荐阅读