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

如何判断循环列表中两个索引是否相邻?模运算能否替代特殊处理?

循环列表中判断两个索引是否相邻的优化方案

你的当前代码能处理普通相邻的索引,但没法覆盖循环列表首尾相邻的情况(比如索引5和0),不需要写特殊判断逻辑,用模运算就能优雅解决这个问题。

现有代码的问题

你当前的代码仅通过abs(a - b) == 1判断相邻,但循环列表里0和5的差值绝对值是5(假设列表长度为6),不符合该条件,会返回错误结果。

用模运算优化的代码

首先要明确循环列表的长度n(比如你例子里是6,索引范围0-5),修改函数如下:

def is_next_to(a, b, n):
    if a == b:
        return False
    # 模运算将差值转换到循环范围内,相邻的情况要么差1,要么差n-1(首尾相邻)
    return (a - b) % n in (1, n - 1)

或者另一种更直观的写法:

def is_next_to(a, b, n):
    if a == b:
        return False
    return abs((a - b) % n) == 1

验证断言

将列表长度设为6,所有断言都能通过:

assert is_next_to(1, 1, 6) is False
assert is_next_to(1, 2, 6) is True
assert is_next_to(0, 1, 6) is True
assert is_next_to(5, 0, 6) is True
assert is_next_to(4, 3, 6) is True
assert is_next_to(3, 4, 6) is True

方案优势

这种方式不需要针对首尾写特殊逻辑,当循环列表长度变化时,只需要修改参数n的值即可,逻辑通用且简洁。

内容的提问来源于stack exchange,提问作者Robin Andrews

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 06:30:57