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

Python实现存储整数各位重复数字的类字典结构支持O(1)访问

实现方案

首先明确:Python原生字典(哈希表)的键具有全局唯一性,天然不支持存储重复键,你预期的同键多次出现的字典结构本身违背哈希表的设计逻辑,没有实际实现的必要——查询时你无法指定要取同名下的哪一个值,完全不具备实用价值。

结合你补充的需求(O(1)复杂度查询指定数字在整数中出现的所有索引位置),只需要调整字典的存储值结构即可,不需要自定义新的数据结构:将每个数字作为唯一键,对应值存储该数字出现过的所有索引的列表,就能完全满足要求。

代码实现

基础原生写法,不需要导入额外模块:

n = 941726149
d = {}
for idx, digit in enumerate(str(n)):
    # 首次遇到该数字时初始化空列表
    if digit not in d:
        d[digit] = []
    # 追加当前索引到对应列表
    d[digit].append(idx)

print(d)

如果追求代码简洁,可以用标准库的defaultdict简化逻辑:

from collections import defaultdict

n = 941726149
d = defaultdict(list)
for idx, digit in enumerate(str(n)):
    d[digit].append(idx)

效果验证

对应你给出的测试用例,输出完全符合要求:

  • 当n = 123455时,d['5']的返回值为[4, 5]
  • 当n = 987385时,d['8']的返回值为[1, 4],d['9']的返回值为[0]

查询时直接通过数字作为键取对应的索引列表,时间复杂度为O(1),完全匹配你最初的性能要求。如果需要按原顺序遍历整数的每一位,直接遍历str(n)即可,不需要依赖字典存储顺序。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 19:57:22