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

Python:for循环找到匹配元素对后如何跳转避免重复计数?

问题分析与解决

你的代码存在几个关键问题:

  • 循环变量c取的是列表中的元素值而非索引,导致lst[c]的访问逻辑完全错误(比如第一个元素是1,lst[c]实际取的是lst[1],这不是你要的当前位置元素)
  • 在for循环里修改c的值毫无意义,因为for循环会按列表元素顺序自动迭代,不会受你修改的c影响
  • 没有处理索引越界的情况,当循环到最后一个元素时,c+1会超出列表范围引发报错

正确实现(用while循环控制索引)

这种方式能直观地手动控制索引跳转,避免重复计数:

lst = [1,1,1,1,1,2,2,2,3,3,3,3,4,4,4]
two_pairs = 0
i = 0
n = len(lst)

while i < n - 1:  # 保证i+1不会超出列表边界
    if lst[i] == lst[i+1]:
        two_pairs += 1
        i += 2  # 找到一对后直接跳2个位置,跳过已计数的元素
    else:
        i += 1  # 元素不相等,只移动1个位置继续检查

print(two_pairs)  # 输出:6

逻辑说明

  1. 用索引i遍历列表,初始值为0
  2. 循环条件i < n-1确保每次都能安全访问lst[i+1],不会越界
  3. 当相邻元素相等时,计数加1,同时i加2跳过下一个元素(避免重复统计)
  4. 元素不相等时,i加1继续检查下一组相邻元素

如果想用for循环实现

可以通过range生成索引,同时手动控制迭代步长:

lst = [1,1,1,1,1,2,2,2,3,3,3,3,4,4,4]
two_pairs = 0
i = 0
n = len(lst)

for i in range(n):
    if i >= n - 1:
        break
    if lst[i] == lst[i+1]:
        two_pairs += 1
        i += 1  # 这里加1是因为for循环本身会自动加1,最终相当于跳2个位置

print(two_pairs)  # 输出:6

不过这种方式不如while循环直观,更推荐用while循环来实现需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 22:58:21