Python中的数据包结构

时间:2015-11-18 04:35:42

标签: python algorithm data-structures

定义

  

Bag or Multiset是一个设置数据结构,允许重复元素,前提是检索顺序不重要。

现在,当我阅读python文档时,它被告知Counter表现为Bag数据结构。但是如果我们可以使用List或Tuple作为替代方法,我会感到困惑吗?

我可以看到一个可能的缺陷是Bag中不允许removing元素。此外,通常检索List或Tuple中的元素需要O(n)时间,但Bag可以通过散列实现,以允许恒定时间移除。

问题

我们可以使用List或Tuple作为Bag数据结构吗?

2 个答案:

答案 0 :(得分:1)

  

我们可以使用List或Tuple作为Bag数据结构吗?

这需要一些代码来使结构正确,并且您可能想要一个列表,因为它们是可变的。但是您可以将重复项添加到列表中,计算并删除它们。

答案 1 :(得分:0)

没有

  • 包的元素是无序且非唯一的。
  • Counter 的元素是无序且非唯一的。
  • 集合的元素是无序且唯一的。
  • 列表(和元组)的元素是有序且非唯一的。

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