python - 如何使用 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)
解决方案
您的代码当前正在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)
的实施也存在问题union
。ind
您从循环中获取的变量名称有点误导,因为它不是索引,而是列表中的值。在if
语句期间,您将其正确地视为一个值(将其与 比较old
,这也是一个值),但在之后的赋值中,您将其用作索引。我认为你确实需要一个值和一个索引,所以我建议重写循环以使用enumerate
,以便在需要时拥有每一个:
for i, val in enumerate(self.lst):
if val == old:
self.lst[i] = new
推荐阅读
- typescript - Typescript - 比较来自服务器的序列化枚举
- json - 用正则表达式替换 JSON 键中的空格
- python - 在 Python 中迭代列表的更快方法
- java - 如何在 pdf 报告中添加从相机或图库中捕获的图像?
- javascript - 如何访问使用 Webpack 导入的 JSON 静态文件?
- php - 如何正确内爆数组以在 mySQL 中实现 REGEXP?
- javascript - 是否有任何用于以规范(一般)形式绘制函数图的 js 库?例如:x^2 + y^2 - 5 = 0;x^2 - y^2 + 2 = 0; ETC
- r - R读取csv文件我只想一列与该行结束特定的字符串值
- javascript - 包含部分的 nodejs/ejs 语法错误
- android - 推送通知始终打开 MainActiviy