【发布时间】:2013-01-10 07:50:30
【问题描述】:
在 Python 中,使用in-操作符可以很容易地检查一个值是否包含在容器中。我想知道为什么有人会在列表上使用in-operator,但是,首先将列表转换为这样的集合会更有效:
if x in [1,2,3]:
相对
if x in set([1,2,3]):
查看time complexity 时,第一个有 O(n),而第二个则优于 O(1)。使用第一个的唯一原因是它更易读且写起来更短吗?或者有没有更实用的特殊情况?为什么 Python 开发人员没有通过首先将第一个转换为第二个来实现第一个?这不是 O(1) 复杂度吗?
【问题讨论】:
-
列表到集合的底层转换的计算复杂度是多少?我希望 O(n),但我不知道 Python 是如何实现的。
-
您真的认为
somelist很小的x in somelist实际上比先将其转换为set然后进行操作更糟糕吗? -
当集合是本机数据类型时,文档看起来像是在谈论
x in set的复杂性。set()本身的复杂性是什么?是 O(n) 吗? -
另一个原因可能是您不能总是使用集合来代替列表。列表可以有重复项,集合没有。要使用的数据结构取决于您的数据是什么。
-
@ypercube 当您使用
in运算符时没关系。