2010-05-30 44 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