Python 符号表使用哪种数据结构?

Python 符号表使用哪种数据结构?,python,Python,在python程序中,我正在解析一个二进制文件以为其构建符号表。然后,我想将地址与符号相关联。现在,我的符号表是由地址、长度和名称组成的symbol对象的排序列表,符号查找会简单地迭代符号。查找包括查找包含给定地址的符号,换句话说: addr >= symbol.addr and addr < symbol.addr + symbol.length addr>=symbol.addr和addr

在python程序中,我正在解析一个二进制文件以为其构建符号表。然后,我想将地址与符号相关联。现在,我的符号表是由地址、长度和名称组成的
symbol
对象的排序列表,符号查找会简单地迭代符号。查找包括查找包含给定地址的符号,换句话说:

addr >= symbol.addr and addr < symbol.addr + symbol.length
addr>=symbol.addr和addr

因为我正在分析的程序越来越大,所以我面临性能问题,并在寻找一种更有效(就复杂性而言)的解决方案。我看了一下
对分
包,它是本例中使用的正确包吗?您将如何实现这一点?

您可能应该看看
dict


您可以通过二进制搜索从左侧查找最近的地址来加快查找速度:

import bisect

addr_to_sym = {sym.addr: sym for sym in symbols}
symbol_addrs = sorted(sym.addr for sym in symbols)

addr = bisect.bisect_left(symbol_addrs, 0xABCDEF)
sym = addr_to_sym[addr]

if addr <= 0xABCDEF <= addr + sym.length:
    # ...
导入对分 addr_to_sym={sym.addr:sym for sym in symbols} symbol\ U addrs=已排序(sym.addr表示符号中的sym) addr=bisect.bisect\u left(符号\u addrs,0xABCDEF) sym=添加到sym[addr]
如果addr
bisect
只是二进制搜索,那么除非对符号表进行排序,否则可能没有用。您在符号表中进行什么样的查找?你能用一本字典将符号名称映射到符号对象吗?@Blender我编辑了我的问题以澄清。@Blender不,我不能,因为我的查找是查找哪个符号“包含”了一个给定的地址,如编辑后的表所示question@I用更多细节编辑了我的问题。你能详细说明你的解决办法吗?