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

如何以Pythonic方式将逗号分隔数字串转为带出现次数的数字

Pythonic方案实现数字列表的次数追加需求

嘿,这个需求我懂!要把逗号分隔的数字字符串,转换成每个数字最后一次出现时追加其总出现次数的格式,确实可以用更简洁的Python代码来实现,不用写一堆繁琐的逻辑。下面给你分享两种清爽的方案:

方案一:遍历中动态更新计数

这种方法利用collections.Counter快速统计次数,然后在遍历过程中跟踪每个数字的剩余出现次数,遇到最后一次出现时就追加总次数:

from collections import Counter

input_str = "2,5,6,9,2,5,8,2,7,1,1,1,4"
nums = input_str.split(',')
counts = Counter(nums)
result = []

for num in nums:
    result.append(num)
    counts[num] -= 1
    # 当剩余次数为0时,说明这是最后一次出现该数字,追加总次数
    if counts[num] == 0:
        result.append(str(counts[num] + 1))  # 因为刚减了1,所以总次数是当前值+1

print(''.join(result))  # 输出: 256191252823711341

思路解释

  1. 先用split(',')把输入字符串拆成单个数字的列表
  2. Counter一键统计每个数字的出现次数,不用手动循环计数
  3. 遍历每个数字时,先把数字加入结果列表,再把对应计数减1
  4. 当计数减到0,说明这是该数字最后一次出现,把它的总次数(也就是原来的计数)追加进去

方案二:先记录最后出现位置再判断

这种方法先提前找出每个数字最后一次出现的索引,遍历的时候对比当前索引,确定是否要追加次数:

from collections import Counter

input_str = "2,5,6,9,2,5,8,2,7,1,1,1,4"
nums = input_str.split(',')
counts = Counter(nums)
# 反向遍历,记录每个数字最后一次出现的索引
last_occurrence = {num: idx for idx, num in reversed(list(enumerate(nums)))}

result = []
for idx, num in enumerate(nums):
    result.append(num)
    # 如果当前索引是该数字最后一次出现的位置,追加总次数
    if idx == last_occurrence[num]:
        result.append(str(counts[num]))

print(''.join(result))  # 输出: 256191252823711341

思路解释

  1. 同样用Counter统计总次数
  2. 通过反向遍历+字典推导式,快速得到每个数字最后一次出现的索引(反向遍历保证第一次遇到的就是最后出现的位置)
  3. 遍历原列表时,对比当前索引和最后出现索引,一致就追加总次数

这两种方案都非常Pythonic,没有冗余的嵌套循环,代码简洁易读,完全能替代繁琐的实现~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 12:58:10