什么是灵活的混合Python集合对象?

0 投票
2 回答
1043 浏览
提问于 2025-04-15 23:20

为了熟悉Python,我正在尝试把我的一些代码从 AutoHotkey_L 翻译成Python。
我马上就遇到了很多关于集合对象的选择。
你能帮我找一个内置类型或者第三方提供的类型,尽可能具备AutoHotkey_L 对象类型及其 方法的功能吗?

AutoHotkey_L对象具备Python中的字典、列表和类实例的特性。

我明白在空间和速度上会有一些权衡,但我更关心的是功能,而不是优化的问题。

2 个回答

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}
10

不要把Python写成像<另一种语言>那样。要用Python的方式来写Python。

选择数据结构时,应该只选择满足你最低需求的那种。

  • list — 一种有序的元素序列,只有一头可以灵活操作。
  • collections.deque — 一种有序的元素序列,两头都可以灵活操作(比如一个队列)。
  • set / frozenset — 一种无序唯一元素序列。
  • collections.Counter — 一种无序非唯一元素序列。
  • dict — 一种无序的键值对关系。
  • collections.OrderedDict — 一种有序的键值对关系。
  • bytes / bytearray — 一串字节的列表。
  • array.array — 一种由相同类型的基本数据构成的列表。

从对象的接口来看,

  • dict 最适合通过键来查找值。
  • collections.OrderedDict 最适合处理推入/弹出操作。

当你需要最小索引/最大索引时,需要一种排序过的键值关系(比如红黑树)。标准库里没有这种类型,但有一些第三方实现

撰写回答