Я получил список объектов, которые выглядят как строки, но не являются реальными строками (подумайте о файлах mmap).Например:
x = [ "abc", "defgh", "ij" ]
Я хочу, чтобы x
был непосредственно индексируемым, как если бы это была большая строка, например:
(x[4] == "e") is True
(Конечно, я не хочуdo "" .join (x), который объединит все строки, потому что чтение строки слишком дорого в моем случае. Помните, что это файлы mmap.).
Это легко, если вы перебираете весь список, но, похоже, O (n).Поэтому я реализовал __getitem__
более эффективно, создав такой список:
x = [ (0, "abc"), (3, "defgh"), (8, "ij") ]
Поэтому я могу выполнить бинарный поиск в __getitem__
, чтобы быстро найти кортеж с нужными данными и затем проиндексировать его строку,Это работает довольно хорошо.
Я вижу, как реализовать __setitem__
, но это кажется таким скучным, мне интересно, нет ли чего-то, что уже делает это.
Чтобы быть более точным, вот как должна соответствовать структура данных __setitem__
:
>>> x = [ "abc", "defgh", "ij" ]
>>> x[2:10] = "12345678"
>>> x
[ "ab", "12345678", "j" ]
Я бы подумал о реализации такой структуры данных, имени или любой подсказке.