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
相关产品推荐
相关产品推荐

