0

作为习惯 python 的一种方式,我正在尝试将我的一些代码从Autohotkey_L转换为 python 。
我立即遇到大量收集对象的选择。
你能帮我找出一个内置类型或第三方贡献的类型,它尽可能多地具有 AutoHotkey_L对象类型及其方法的功能。

AutoHotkey_L 对象具有 python 字典、列表和类实例的功能。

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

4

2 回答 2

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

于 2010-05-30T07:33:45.663 回答
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}
于 2010-05-30T07:20:32.333 回答