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)
我不确定这是否是完整的解决方案,但希望这能帮助您找出错误。
我无法显示所有迭代对(例如:查询参数: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)
我不确定这是否是完整的解决方案,但希望这能帮助您找出错误。