You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在满足条件后停止迭代?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,提问作者Екатерина Городкова

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 11:41:02