作为一种习惯python的方法,我试图将我的一些代码从Autohotkey_L转换为python。
我立刻遇到了大量的收集对象选择。
你能帮我找出尽可能多的内置类型或第三方贡献类型,AutoHotkey_L object type及其methods的功能。
AutoHotkey_L对象具有python dict,list和类实例的功能。
我知道空间和速度存在权衡,但我只对功能而不是优化问题感兴趣。
答案 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}