定义:
Bag or Multiset是一个设置数据结构,允许重复元素,前提是检索顺序不重要。
现在,当我阅读python文档时,它被告知Counter表现为Bag数据结构。但是如果我们可以使用List或Tuple作为替代方法,我会感到困惑吗?
我可以看到一个可能的缺陷是Bag中不允许removing
元素。此外,通常检索List或Tuple中的元素需要O(n)时间,但Bag可以通过散列实现,以允许恒定时间移除。
问题:
我们可以使用List或Tuple作为Bag数据结构吗?
答案 0 :(得分:1)
我们可以使用List或Tuple作为Bag数据结构吗?
是
这需要一些代码来使结构正确,并且您可能想要一个列表,因为它们是可变的。但是您可以将重复项添加到列表中,计算并删除它们。
答案 1 :(得分:0)
没有
Counter 的行为就像一袋 m&m's。列表的行为就像一个 pez 分配器 - 其元素的顺序很重要。
> a = {1, 2, 3}
> b = {1, 2, 3}
> c = {1, 3, 2}
> a == b
True
> a == c
True
> a = Counter((1, 2, 3))
> b = Counter((1, 2, 3))
> c = Counter((1, 3, 2))
> a == b
True
> a == c
True
> a = [1, 2, 3]
> b = [1, 2, 3]
> c = [1, 3, 2]
> a == b
True
> a == c
False