Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 有效地比较数据库行值_Python_Mysql_Database_Logic - Fatal编程技术网

Python 有效地比较数据库行值

Python 有效地比较数据库行值,python,mysql,database,logic,Python,Mysql,Database,Logic,我想循环浏览一个文档数据库并计算成对比较分数 一个简单、幼稚的方法会将一个循环嵌套在另一个循环中。这将导致程序两次比较文档,并将每个文档与自身进行比较 高效完成此任务的算法有名称吗? 这种方法有名字吗 谢谢。您可以跟踪您已经比较过的文档,例如数字 compared = set() for i in [1,2,3]: for j in [1,2,3]: pair = frozenset((i,j)) if i != k and pair not in c

我想循环浏览一个文档数据库并计算成对比较分数

一个简单、幼稚的方法会将一个循环嵌套在另一个循环中。这将导致程序两次比较文档,并将每个文档与自身进行比较

高效完成此任务的算法有名称吗? 这种方法有名字吗


谢谢。

您可以跟踪您已经比较过的文档,例如数字

compared = set()

for i in [1,2,3]:
    for j in [1,2,3]:
        pair =  frozenset((i,j))
        if i != k and pair not in compared:
            compare.add(pair)
            compare(i,j)
另一个想法是先创建文档的组合,然后对它们进行迭代。但是为了生成这个,你必须迭代两个列表,然后再次迭代结果列表,所以我认为它没有任何优势

更新: 如果列表中已经有文档,那么Hogan的答案确实更好。但我认为需要一个更好的例子:

docs = [1,2,3]
l = len(docs)
for i in range(l):
    for j in range(i+1,l):
        compare(l[i],l[j])

我认为它不够复杂,没有资格获得一个名字

您可以通过强制对不同行之间可能不同的任何值进行比较来避免重复对-主键是一个明显的选择,例如

唯一配对:

SELECT a.item as a_item, b.item as b_item
FROM table AS a, table AS b
WHERE a.id<b.id
可能有很多方法可以使用比较操作来生成数据汇总,从而识别可能相似的项目-对于单个单词,soundex是一个明显的选择-但是您没有说明您的比较指标是什么


C.

假设所有项目都有一个编号ItemNumber

简单解决方案-始终使第二个元素的ItemNumber大于第一个元素

乙二醇

视觉提示:如果您将比较视为一个轴上一个项目的矩阵项目编号,另一个轴上另一个项目的矩阵项目编号,则会查看其中一个三角形

........
x.......
xx......
xxx.....
xxxx....
xxxxx...
xxxxxx..
xxxxxxx.
像这样的

src = [1,2,3]
for i, x in enumerate(src):
    for y in src[i:]:
        compare(x, y)
或者您可能希望生成一个配对列表:

pairs = [(x, y) for i, x in enumerate(src) for y in src[i:]]

我的解决方案快得多。没有对的开销。这个实现不是把复杂性从n^2变成了n^3吗?不仅有嵌套循环,而且未比较的对是On操作。有更简单/更高效的实现。但似乎@seanieb很满意。@Traveling Tech Guy:是的,我从列表改为set和frozenset。我认为,一个集合可以访问O1,因为它是作为字典键实现的。我也考虑过这一点,但OP可能不想更改模型类。@Felix:Cool。。。告诉我你这是什么意思?模范班?那到底是什么?我假设OP以某种方式使用一个类来表示文档,模型可能使用ORM。但我刚刚意识到,使用列表索引很容易做到这一点。首先,我认为你的意思是让文件具有可比性。我仍然认为你可以提供一个更好的例子;。但没关系。@Felix:我明白了,您是在为集合实现一个解决方案,作为对具有唯一项目编号的数组/集合的操作。你的解决方案当然是用集合来做的。很少情况下,您没有数组的底层唯一索引,但这种情况可能会发生——主要是在函数式语言和非关系数据库中。
pairs = [(x, y) for i, x in enumerate(src) for y in src[i:]]