用于字符串可索引列表的Python数据结构

问题描述

| 我得到了一个看起来像字符串但不是真实字符串的对象列表(想想mmap \ ed文件)。像这样:
x = [ \"abc\",\"defgh\",\"ij\" ]
我想要的是ѭ1可以直接索引,就​​像它是一个大字符串一样,即:
(x[4] == \"e\") is True
(当然,我不想做会合并所有字符串的\“ \”。join(x),因为在我看来,读取字符串太昂贵了。记住它是mmap文件。) 如果您遍历整个列表,这很容易,但是似乎是O(n)。因此,通过创建这样的列表,我更有效地实现了
__getitem__
x = [ (0,\"abc\"),(3,\"defgh\"),(8,\"ij\") ]
因此,我可以在
__getitem__
中进行二进制搜索,以快速找到具有正确数据的元组,然后索引其字符串。效果很好。 我看到了如何实现
__setitem__
,但是似乎很无聊,我想知道是否还没有这样做的东西。 更准确地说,这是数据结构应遵循“ 6”的方式:
>>> x = [ \"abc\",\"ij\" ]
>>> x[2:10] = \"12345678\"
>>> x
[ \"ab\",\"12345678\",\"j\" ]
我会对这种数据结构实现,名称或任何提示不抱任何想法。     

解决方法

您所描述的是绳索数据结构的一种特殊情况。 不幸的是,我不知道任何Python实现。     ,您已经重新创建了词典数据类型。     ,那么,您是否仍然想像第ѭ个9一样寻址第n个列表元素? 如果不是,则您的数据结构只是一个字符串,其中包含一些使它可变的方法以及从字符串列表中对其进行初始化的方法。 如果确实愿意,那么您的数据结构仍然是带有这些额外方法的字符串,外加另一个元素来跟踪其元素来自的范围,例如“ 10”。 无论哪种方式,似乎都想存储和处理一个字符串。     ,这可能是一个开始:
self._h = {0:\"abc\",3:\"defgh\",8:\"ij\"} #create _h and __len__ in __init__
self.__len__ = 10

def __getitem__(i):
    if i >= self.__len__:
        raise IndexError
    o=0
    while True:
        if i-o in self._h:
            return self._h[i-o][o]
        o+=1
改进包含可变性。     ,我不知道有什么可以满足您的需求。 但是,如果您以所说的方式有效地实现了“ 3”,那么您已经有了将索引映射到元组,字符串列表的代码。因此,似乎您可以重用那部分代码-进行一些重构-以实现需要相同信息才能执行其功能的
__setitem__
。     

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...