Python的效率/速度如何';s';在';?(时间复杂度方面)

Python的效率/速度如何';s';在';?(时间复杂度方面),python,performance,time-complexity,operator-keyword,Python,Performance,Time Complexity,Operator Keyword,在Python中,In关键字的效率是多少,例如: a = [1, 2, 3] if 4 in a: ... 列表的复杂性是: O(n) 对于集合,它是: O(1) 这取决于右手: 操作员在和不在测试集合成员资格。[…]集合成员资格测试传统上被绑定到序列;如果集合是序列并且包含与该对象相等的元素,则对象是集合的成员。然而,对于许多其他对象类型来说,支持成员资格测试而不是序列是有意义的。特别是,字典(用于键)和集合支持成员资格测试 类可以实现覆盖默认行为(在序列上迭代)的方法,因此可以提供

在Python中,
In
关键字的效率是多少,例如:

a = [1, 2, 3]
if 4 in a:
  ...

列表的复杂性是:

O(n)
对于集合,它是:

O(1)

这取决于右手:

操作员
不在
测试集合成员资格。[…]集合成员资格测试传统上被绑定到序列;如果集合是序列并且包含与该对象相等的元素,则对象是集合的成员。然而,对于许多其他对象类型来说,支持成员资格测试而不是序列是有意义的。特别是,字典(用于键)和集合支持成员资格测试

类可以实现覆盖默认行为(在序列上迭代)的方法,因此可以提供比比较容器的每个元素更有效(或更不有效)的方法来测试成员资格

成员资格测试操作符(中的
不在
中)通常作为序列的迭代来实现。但是,容器对象可以提供以下具有更高效实现的特殊方法,这也不要求对象是序列



由于您的示例中有一个列表,因此会对其进行迭代,并对每个元素进行比较,直到找到匹配项或列表已用尽。时间复杂度通常是
O(n)

我想字符串的时间复杂度是相同的?
集合成员资格测试传统上是绑定到序列的字符串是序列。@Felix Kling如果在检查元素是否是其一部分之前将列表转换为集合,它会比直接在列表中检查更快吗?@KocT9H:取决于检查的频率。如果只有一次,那么就没有区别了,因为我认为,将列表转换为集合也是
O(n)
。一般来说,Felix Kling的答案是最好的。有人可以实现一个
MembershipList
类,该类有一个基本列表和一个成员集实例变量,并重写
\uuuuuuuu包含的成员集,以检查该集的O(1)次。那么dictionary@eduardo:)关键字如何有效?