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

如何在Python中重命名重复字符串?将重复串替换为对应整数

解决列表重复字符串替换为递增整数的问题

首先,咱们先看看你原来的代码为什么达不到预期效果:

  • Counter确实能统计每个元素的出现次数,但mylist.index(s)只会返回第一个匹配项的索引,所以你每次只替换了第一个出现的重复元素。
  • 而且你把所有重复元素都硬设成了1,没有实现按出现顺序分配递增的数字。

要实现你想要的效果——重复项按首次出现的顺序对应1、2、3...,咱们可以用一个字典来跟踪每个重复字符串对应的数字,同时遍历整个列表逐个替换。

完整实现代码

mylist = ["name", "state", "name", "city", "city", "name", "zip", "zip", "name"]
from collections import Counter

# 先统计每个元素的出现次数,判断哪些是重复项
counts = Counter(mylist)
# 用字典存储重复字符串对应的数字
str_to_num = {}
current_num = 1

# 遍历列表,逐个处理元素
for idx, item in enumerate(mylist):
    # 只处理出现次数>1的元素
    if counts[item] > 1:
        if item not in str_to_num:
            # 首次遇到该重复项,分配当前数字,然后数字递增
            str_to_num[item] = current_num
            current_num += 1
        # 替换为对应的数字
        mylist[idx] = str_to_num[item]

print(mylist)
# 输出结果:[1, 'state', 1, 2, 2, 1, 3, 3, 1]

代码解释

  1. 统计出现次数:用Counter先找出所有重复出现的元素(出现次数>1),避免处理只出现一次的元素(比如示例里的state)。
  2. 跟踪数字映射:str_to_num字典用来记录每个重复字符串对应的整数,确保同一个字符串对应同一个数字。
  3. 遍历替换:用enumerate遍历列表的索引和元素,遇到重复项时,先检查字典里有没有对应的数字,没有就分配当前的current_num并递增,然后替换列表中的元素。

这样就能完美实现你想要的效果:name对应1,city对应2,zip对应3,后续新增的重复项也会依次分配4、5、6...

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 03:43:12