什么是灵活的混合python集合对象?

时间:2010-05-30 07:12:46

标签: python data-structures autohotkey

作为一种习惯python的方法,我试图将我的一些代码从Autohotkey_L转换为python。
我立刻遇到了大量的收集对象选择。
你能帮我找出尽可能多的内置类型或第三方贡献类型,AutoHotkey_L object type及其methods的功能。

AutoHotkey_L对象具有python dict,list和类实例的功能。

我知道空间和速度存在权衡,但我只对功能而不是优化问题感兴趣。

2 个答案:

答案 0 :(得分:10)

不要将Python编写为<another-language>。把Python写成Python。

应选择数据结构,以便具备您需要使用的最低能力。

  • list - 一个有序的元素序列,有1个灵活的结尾。
  • collections.deque - 一个有序的元素序列,有2个灵活的结尾(例如队列)。
  • set / frozenset - 无序 唯一元素序列。
  • collections.Counter - 非唯一元素的无序序列。
  • dict - 无序键值关系。
  • collections.OrderedDict - 订购的键值关系。
  • bytes / bytearray - 字节列表。
  • array.array - 基本类型的同类列表。

查看Object的界面,

  • dict最适合按键
  • 查找值
  • collections.OrderedDict最适合推/弹的东西。

当您需要MinIndex / MaxIndex时,需要排序键值关系(例如红黑树)。标准库中没有这种类型,但有3rd party implementations

答案 1 :(得分:1)

如果不知道你打算如何使用它,就不可能推荐一个特定的课程。如果您将此特定对象用作可重复元素的有序序列,则应使用列表;如果您按键查找值,则使用字典。使用不同的数据类型,您将获得非常不同的算法运行时复杂性。确定何时使用哪种类型确实不需要花费太多时间......我建议你进一步考虑。

但是,如果你真的无法决定,这是一种可能性:

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}