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

不使用groupby实现数字游程编码:编写Python频率元组列表函数

问题解决:手动实现整数的连续数字计数

先看你代码里的几个明显问题:

  • 字符串是不可变类型,你直接str(n) = str(n)[j:]是语法错误,得先把整数转成字符串存到变量里再操作。
  • 嵌套循环逻辑完全乱了:j的范围没做限制,会直接触发索引越界;而且每次找到相同字符就往列表里加,导致重复记录,根本没统计连续次数。
  • while循环里每次都调用str(n),但n本身没变化,会陷入死循环。

下面是正确的实现方式,逻辑简单直接,完全不用内置分组函数:

def compress(n):
    s = str(n)
    if not s:
        return []
    result = []
    current_char = s[0]
    count = 1
    # 从第二个字符开始遍历
    for char in s[1:]:
        if char == current_char:
            count += 1
        else:
            # 遇到不同字符,把当前统计的组加入结果
            result.append((current_char, count))
            current_char = char
            count = 1
    # 别忘了把最后一组加入结果
    result.append((current_char, count))
    return result

print(compress(11122))  # 输出 [('1', 3), ('2', 2)]
print(compress(11122311))  # 输出 [('1', 3), ('2', 2), ('3', 1), ('1', 2)]

代码逻辑说明:

  1. 先把输入整数转成字符串s,方便逐个字符处理。
  2. 初始化current_char为第一个字符,count为1,用来统计当前字符的连续出现次数。
  3. 从第二个字符开始遍历:
    • 如果和当前字符相同,计数加1;
    • 如果不同,就把当前的(字符,计数)元组加入结果列表,然后切换当前字符为新字符,计数重置为1。
  4. 遍历结束后,最后一组字符还没加入列表,所以要手动加一次。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 18:46:03