Python不使用enumerate和set获取列表元素所有索引并存入字典
实现思路
- 手动维护索引计数器,替代
enumerate函数的索引获取功能 - 遍历列表时直接检查元素是否已存在于字典键中,替代
set函数的去重遍历逻辑 - 元素首次出现时在字典中创建对应键,值为存储当前索引的列表;非首次出现时直接将当前索引追加到对应列表即可
完整实现代码
x = [1.2, 2.4, 3.1, 4.0, 5.6, 6.5, 1.2, 3.1, 8.1, 23.6, 29.3] res_dict = {} idx = 0 for val in x: if val not in res_dict: res_dict[val] = [] res_dict[val].append(idx) idx += 1 # 可选:如果仅需要保留重复元素,取消注释下一行即可 # res_dict = {k:v for k,v in res_dict.items() if len(v) >= 2} print(res_dict)
输出结果
{1.2: [0, 6], 2.4: [1], 3.1: [2, 7], 4.0: [3], 5.6: [4], 6.5: [5], 8.1: [8], 23.6: [9], 29.3: [10]}
代码说明
- 全程未使用
enumerate和set函数,符合要求 - 仅需遍历列表1次,时间复杂度为O(n),比原示例多次调用
count、重复遍历列表的实现效率更高 - 默认覆盖所有元素,重复元素和唯一元素都会存储全部对应索引,符合预期输出格式要求
内容的提问来源于stack exchange,提问作者Aza
相关产品推荐
相关产品推荐

