如何以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
思路解释
- 先用
split(',')把输入字符串拆成单个数字的列表 Counter一键统计每个数字的出现次数,不用手动循环计数- 遍历每个数字时,先把数字加入结果列表,再把对应计数减1
- 当计数减到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
思路解释
- 同样用
Counter统计总次数 - 通过反向遍历+字典推导式,快速得到每个数字最后一次出现的索引(反向遍历保证第一次遇到的就是最后出现的位置)
- 遍历原列表时,对比当前索引和最后出现索引,一致就追加总次数
这两种方案都非常Pythonic,没有冗余的嵌套循环,代码简洁易读,完全能替代繁琐的实现~
内容的提问来源于stack exchange,提问作者user9409989
相关产品推荐
相关产品推荐

