如何在满足条件后停止迭代?Python数组匹配问题求助
问题描述
我有如下数组:
print(list_games) array([[77, 63], [94, 49], [58, 98], ..., [ 7, 0], [68, 22], [ 1, 32]], dtype=int64)
我需要打印出第一个满足条件list_games[i][0] + list_games[j][1] == 131的元素对及其索引,但当前代码会输出所有符合条件的元素对:
for i in range(len(list_games)): for j in range(len(list_games)): if list_games[i][0] + list_games[j][1] == 131: print(list_games[i][0], list_games[j][1]) break
输出结果为:
77 54 94 37 58 73 51 80 80 51 74 57 66 65 61 70 87 44 40 91
请问如何修改代码以实现需求?
解决方案
原代码的问题在于,内层循环的break仅终止当前的j循环,外层i循环仍会继续遍历,因此会输出多组符合条件的结果。要只获取第一个满足条件的元素对及索引,需在找到结果后立即终止所有循环,以下是几种可行方案:
方案1:使用标志变量
found = False for i in range(len(list_games)): for j in range(len(list_games)): if list_games[i][0] + list_games[j][1] == 131: print(f"索引i={i}, j={j},元素对:{list_games[i][0]}, {list_games[j][1]}") found = True break if found: break
方案2:封装为函数,通过return终止
def find_first_matching_pair(arr): for i in range(len(arr)): for j in range(len(arr)): if arr[i][0] + arr[j][1] == 131: print(f"索引i={i}, j={j},元素对:{arr[i][0]}, {arr[j][1]}") return find_first_matching_pair(list_games)
方案3:利用for-else结构
for i in range(len(list_games)): for j in range(len(list_games)): if list_games[i][0] + list_games[j][1] == 131: print(f"索引i={i}, j={j},元素对:{list_games[i][0]}, {list_games[j][1]}") break else: # 内层循环正常结束(未触发break),继续外层循环 continue # 内层触发了break,终止外层循环 break
以上三种方法均能在找到第一个符合条件的元素对后,立即终止所有循环,仅输出该组结果及对应索引。
内容的提问来源于stack exchange,提问作者Екатерина Городкова
相关产品推荐
相关产品推荐

