【发布时间】:2014-03-04 08:48:28
【问题描述】:
考虑这个主要列表:
main_list = [['room A0', 'level0'],
['room A1', ''],
['room John Doe', ''],
['room 10', 'levelz'],
['room 102', ''],
['Big hall', 'level1a'],
['xyz', '']]
这是一个有序列表:
- level0: 0,1,2
- levelz: 3,4
- level1a: 5,6
我想创建第二个列表(或其他数据结构), 这有助于我快速查找。
例子:
question: 'Give me index 4',
answer: 'room 102', 'levelz' (hidden lookup for levelz, which is at index3)
main_list 列表通常被读取多次,并且只是偶尔修改。
现在这是我的解决方案:
par_table = ['level0', 'level1', 'level1a']
ref_par_table = [0,0,0,1,1,2,2]
ref_par_table 列表的长度与原始main_list 完全相同。
par_table 仅包含从原始列表中挑选的关键字。
当我修改main_list时,我也会更新par_table和ref_par_table。
原来的例子是这样的:
question: 'Give me index 4',
answer: main_list[4], par_table[ref_par_table[4]]
('room 102', 'levelz')
还有更优雅的方法吗?
编辑:我的问题更多是关于数据结构,然后是 main_list 的实际解析。
在现实生活中,主列表通常在 1000-99000 个元素之间,其中每个元素是一个长度为 7 的列表。因此,在这种情况下,为每次查找解析(搜索)main_list 是一个大忌。
【问题讨论】:
-
main_list这种奇怪的数据结构有什么特别的原因吗? -
是的。上面的例子是一个简化的数据结构。原始的也是列表列表,反映了一个固定宽度的表格,其中列数为 7,行数(行)通常为 1000-99000。它是 gui 程序的一部分,每次击键操作必须严格控制在 10 毫秒以下(最坏情况:20 毫秒)。所以我基本上在一台中等大小的笔记本电脑上实时处理一张相当大的桌子。
-
您需要查找。您不使用字典的任何特殊原因?
-
msvalkon:您刚刚回复,而我正在编辑我之前的答案。基本上列表列表反映了一个固定宽度表。
-
msvalkon:也许对于 lookup 来说,字典是正确的数据结构。想进一步发展你的想法吗?
标签: python list indexing lookup slice