0

Python に慣れる方法として、コードの一部をAutohotkey_Lから Python に変換しようとしています。
コレクション オブジェクトの選択肢がたくさんあります。 AutoHotkey_Lオブジェクトタイプとそのメソッド
の機能を可能な限り備えた組み込みタイプまたはサードパーティが提供したタイプを見つけるのを手伝ってもらえますか.

AutoHotkey_L オブジェクトには、python dict、list、およびクラス インスタンスの機能があります。

スペースと速度のトレードオフがあることは理解していますが、最適化の問題よりも機能性に関心があるだけです。

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—プリミティブ型の同種のリスト。

オブジェクトのインターフェースを見て、

  • dictキーで値を見つけるのに最適です
  • collections.OrderedDictプッシュ/ポップのものに最適です。

MinIndex / MaxIndexが必要な場合。ソートされたキーと値の関係(たとえば、赤黒木)が必要です。標準ライブラリにはそのようなタイプはありませんが、サードパーティの実装があります。

于 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 に答える