Что такое гибкий гибридный объект коллекции Python?

Чтобы привыкнуть к python, я пытаюсь перевести часть своего кода на python из Autohotkey_L< /а>.
Я тут же сталкиваюсь с массой вариантов коллекций объектов.
Можете ли вы помочь мне определить встроенный тип или тип, предоставленный третьей стороной, который имеет максимально возможную функциональность AutoHotkey_L
тип объекта и его методы.

Объекты AutoHotkey_L имеют функции python dict, list и экземпляра класса.

Я понимаю, что есть компромиссы между пространством и скоростью, но меня просто интересует функциональность, а не вопросы оптимизации.


person Naveen    schedule 30.05.2010    source источник
comment
Какие особенности list у него есть?   -  person kennytm    schedule 30.05.2010
comment
object._insert и object._remove push и pop в конце объекта. Объектные элементы могут быть объектами и могут изменяться.   -  person Naveen    schedule 30.05.2010


Ответы (2)


Не пишите Python как <another-language>. Пишите Python как Python.

Структура данных должна быть выбрана так, чтобы иметь минимальные возможности, которые вам нужно использовать.

  • listупорядоченная последовательность элементов с 1 гибким концом.
  • collections.dequeупорядоченная последовательность элементов с двумя гибкими концами (например, очередь).
  • set / frozensetнеупорядоченная последовательность уникальных элементов.
  • collections.Counterнеупорядоченная последовательность неуникальных элементов.
  • dictнеупорядоченная связь "ключ-значение".
  • collections.OrderedDictупорядоченное отношение "ключ-значение".
  • bytes / bytearray — список байтов.
  • array.array — однородный список примитивных типов.

Глядя на интерфейс Object,

  • dict было бы наиболее подходящим для поиска значения по ключу
  • collections.OrderedDict будет наиболее подходящим для push/pop вещей.

когда вам нужен MinIndex / MaxIndex, где требуется отсортированное отношение ключ-значение (например, красное черное дерево). В стандартной библиотеке такого типа нет, но есть Сторонние реализации.

person kennytm    schedule 30.05.2010

Было бы невозможно рекомендовать конкретный класс, не зная, как вы собираетесь его использовать. Если вы используете этот конкретный объект как упорядоченную последовательность, в которой элементы могут повторяться, вам следует использовать список; если вы ищете значения по их ключу, используйте словарь. Вы получите очень разную алгоритмическую сложность времени выполнения с разными типами данных. На самом деле не требуется много времени, чтобы определить, когда какой тип использовать... Я предлагаю вам еще раз подумать над этим.

Если вы действительно не можете решить, вот возможность:

class AutoHotKeyObject(object):
    def __init__(self):
        self.list_value = []
        self.dict_value = {}
    def getDict(self):
        return self.dict_value
    def getList(self):
        return self.list_value

С помощью вышеизложенного вы можете использовать как функции списка, так и словаря, например:

obj = AutoHotKeyObject()
obj.getList().append(1)
obj.getList().append(2)
obj.getList().append(3)
print obj.getList() # Prints [1, 2, 3]
obj.getDict()['a'] = 1
obj.getDict()['b'] = 2
print obj.getDict() # Prints {'a':1, 'b':2}
person Michael Aaron Safyan    schedule 30.05.2010
comment
здесь также есть несколько интересных идей: вопросы/1338714/. Я также хотел бы иметь возможность применять обработку списка к группе dict/class, которую они описывают. - person Naveen; 30.05.2010