用于可转换字符串列表的Python数据结构

jd_*_*jd_ 9 python algorithm data-structures

我得到了一个看起来像字符串的对象列表,但不是真正的字符串(想想mmap的文件).像这样:

x = [ "abc", "defgh", "ij" ]
Run Code Online (Sandbox Code Playgroud)

我想要的是x直接可索引,就像它是一个大字符串,即:

(x[4] == "e") is True
Run Code Online (Sandbox Code Playgroud)

(当然我不想做"".join(x)会合并所有字符串,因为在我的情况下读取字符串太贵了.记住它是mmap的文件.).

如果迭代整个列表,这很容易,但它似乎是O(n).所以我__getitem__通过创建这样的列表来更有效地实现:

x = [ (0, "abc"), (3, "defgh"), (8, "ij") ]
Run Code Online (Sandbox Code Playgroud)

因此,我可以进行二进制搜索,__getitem__以快速找到具有正确数据的元组,然后索引其字符串.这非常有效.

我看到如何实现__setitem__,但它看起来很无聊,我想知道是否已经没有那样做了.

更准确地说,这就是数据结构应该遵循的方式__setitem__:

>>> x = [ "abc", "defgh", "ij" ]
>>> x[2:10] = "12345678"
>>> x
[ "ab", "12345678", "j" ]
Run Code Online (Sandbox Code Playgroud)

我会对这样的数据结构实现,名称或任何提示有所了解.

NPE*_*NPE 9

您所描述的是绳索数据结构的特例.

不幸的是,我不知道任何Python实现.