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
逻辑说明
- 用索引
i遍历列表,初始值为0 - 循环条件
i < n-1确保每次都能安全访问lst[i+1],不会越界 - 当相邻元素相等时,计数加1,同时
i加2跳过下一个元素(避免重复统计) - 元素不相等时,
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
相关产品推荐
相关产品推荐

