2010-05-30 50 views
0

作为一种习惯python的方式,我试图从Autohotkey_L将我的一些代码翻译成python。
我马上遇到了大量的收集对象的选择。
你能帮我找出一个内置类型或第三方贡献类型,尽可能多的,AutoHotkey_L object type及其methods的功能。
什么是灵活的混合python集合对象?

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

据我所知,有空间和速度的权衡,但我在功能,而不是优化的问题只是感兴趣。

+0

“list”有什么特点? – kennytm 2010-05-30 07:15:53

+0

object._insert和object._remove在对象的末尾推送并弹出。对象项可以是对象,并且是可变的。 – Naveen 2010-05-30 07:20:35

回答

10

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

的数据结构应选择正好有你需要使用最少的能力。

  • list - 一个有序元素的序列,具有1个柔性端。
  • collections.deque - 元素的有序序列,用2周的柔性端(例如,队列)。
  • set/frozenset - 一个无序序列独特元素。
  • collections.Counter - 一个无序序列非唯一元素。
  • dict - 一个无序键值关系。
  • collections.OrderedDict - 一个有序键值关系。
  • bytes/bytearray - 字节的列表。
  • array.array - 原始类型的同质列表。

望着对象的接口,

  • dict将是最适合于关键
  • collections.OrderedDict找到一个值将是最适合推/流行的东西。
当你需要MinIndex/MaxIndex,其中 排序键值关系

(如红黑树)是必需的。标准库中没有这种类型,但有3rd party implementations

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} 
+0

这里也有一些有趣的想法:http://stackoverflow.com/questions/1338714/accesing-dictionary-with-class-atribute。我还希望能够将列表处理应用到他们描述的字典/类“群”。 – Naveen 2010-05-30 07:40:00