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

Python列表重复元素分配相同ID的程序问题求助

问题分析与解决

你的代码核心问题在于id_list会存储所有遍历过的元素(包括重复项),导致第二次遇到['C','G']时,id_list.index(item)返回的是它在id_list中的第一个出现位置(索引3),加1后得到4,但你需要的是该元素首次被分配的ID(3)。

更合理的做法是用字典映射唯一元素到对应ID,因为字典的键具有唯一性,且查找效率远高于列表的index方法。另外注意:列表不能作为字典的键,需要先将列表元素转为元组。

修正后的代码

my_list = [['A','F'], ['B','F'], ['B','F'], ['C','G'], ['A','F'], ['C','G'] , ['A','F'],['A','D']]

id_map = {}
id_node_list = []
counter = 0

for item in my_list:
    key = tuple(item)  # 转元组作为字典键
    if key in id_map:
        current_id = id_map[key]
    else:
        counter += 1
        current_id = counter
        id_map[key] = current_id
    id_node_list.append([current_id, item[0], item[1]])
    
print(id_node_list)

正确输出

[[1, 'A', 'F'], [2, 'B', 'F'], [2, 'B', 'F'], [3, 'C', 'G'], [1, 'A', 'F'], [3, 'C', 'G'], [1, 'A', 'F'], [4, 'A', 'D']]

逻辑说明

  • 用id_map记录每个唯一元素首次分配的ID,后续遇到相同元素直接从字典中取ID,避免重复计算
  • 元组作为字典键,解决了列表不可哈希的问题
  • 字典查找时间复杂度为O(1),比原代码中列表index方法的O(n)更高效,适合处理动态增长的列表

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 04:48:18