for 循环对迭代不会显示所有对(没有重复)。我只得到列表的前两个值 - python

for loop pair iteration will not display all pairs(without repetition). I only get the first two values of list - python

我无法显示所有迭代对(例如:查询参数: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)

如果有人能帮我理解为什么 pairings/calculations 不显示会有所帮助,谢谢。

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

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

循环中有 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)

如果您只是一次查找三件事的所有组合,那么看在上帝的份上,请使用专用于此目的的 Python 模块:

>>> import itertools
>>> list(itertools.combinations((321,212,341),2))
[(321, 212), (321, 341), (212, 341)]
>>>

您从不使用 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)

我不确定这是否是完整的解决方案,但希望这能帮助您找出错误。