0

我无法显示所有对迭代(例如:查询参数:321,212,341)

[321][212] = 0.564
[321][341] = 0.26
[212][341] = 0.22

而且我不确定这是否与 for 循环有关:

sim_pairs = []
match_pair = {}

for i in range(len(matID) - 1):
    for j in range(i+1, len(matID) - 1):
        mat1 = int(matID[i])
        mat2 = int(matID[i + 1])
        compute_similarity = similarity_material(mat1, mat2, method='matching')
        s = compute_similarity
        current_item, next_item = matID[i], matID[i + 1]
        sim_pairs.append((current_item, next_item, s))
        sim_pairs = sorted(sim_pairs, key=(lambda x: x[1]), reverse=True)
        return return_object(sim_pairs)

如果有人可以帮助我理解为什么配对/计算不会显示会有所帮助,谢谢。

4

3 回答 3

0

您永远不会使用内部循环中的索引。

您过早地结束了内部循环。你永远不会到达最后一个元素。

return在循环内有语句,因此循环永远不会重复。

此外,如果您遍历列表元素而不是索引,则通常更容易编写和读取循环。enumerate()如果您需要两者都可以使用。

for i, mat1 in enumerate(matID[:-1]):
    for mat2 in matID[i+1:]:
        compute_similarity = similarity_material(mat1, mat2, method='matching')
        s = compute_similarity
        sim_pairs.append((mat1, mat2, s))
        sim_pairs = sorted(sim_pairs, key=(lambda x: x[1]), reverse=True)
    return return_object(sim_pairs)
于 2021-07-13T21:06:52.223 回答
0

如果您只是在寻找一次取 2 件的三件事情的所有组合,那么天哪,请使用专门用于此目的的 Python 模块:

>>> import itertools
>>> list(itertools.combinations((321,212,341),2))
[(321, 212), (321, 341), (212, 341)]
>>>
于 2021-07-13T21:08:21.573 回答
0

您从不使用 j 计数器,因此您在内部循环中多次比较相邻值,但这些值永远不会改变。

您不妨将 mat1 设置在内循环之外,如下所示:

    sim_pairs = []
    match_pair = {}

    for i in range(len(matID) - 1):
        mat1 = int(matID[i])

        for j in range(i+1, len(matID) - 1):
            mat2 = int(matID[j])
            compute_similarity = similarity_material(mat1, mat2, method='matching')
            s = compute_similarity
            current_item, next_item = matID[i], matID[j + 1]
            sim_pairs.append((current_item, next_item, s))
            sim_pairs = sorted(sim_pairs, key=(lambda x: x[1]), reverse=True)
    return return_object(sim_pairs)

我不确定这是否是整个解决方案,但希望这可以帮助您识别错误。

于 2021-07-13T21:09:23.143 回答