[英]in list VS in tuple condition in python
我想知道使用in tuple
和in list
条件之间的最佳实践是什么,并知道原因,如下所示:
my_variable = 'A'
if my_variable in [2, 'A', None]:
return True
elif my_variable in (2, 'A', None):
return True
如果可能的话,在这种情况下列出元组/列表的优点/缺点。
list
和tuple
x in container
检查中对于x in container
时间复杂度均为 O(n)。
但是, set
有一个 O(1) 用于此检查(大多数情况下,由于哈希冲突,最坏的情况将具有更糟糕的时间复杂度)。
查看列表、元组和包含 100 万个元素的集合的这些时间:
from timeit import Timer
li = list (range(1, 1000000))
t = tuple(range(1, 1000000))
s = set (range(1, 1000000))
def x_in_list():
999999 in li
def x_in_tuple():
999999 in t
def x_in_set():
999999 in s
print(min(Timer(x_in_list).repeat(5, 5)))
print(min(Timer(x_in_tuple).repeat(5, 5)))
print(min(Timer(x_in_set).repeat(5, 5)))
输出
0.08769642199999961
0.09637485699999981
9.329999999252436e-07
如果只有 3 个元素,则 List、Tuple 和 Set 之间的运行时差异可以忽略不计。
据我所知,Pep8 样式指南对此没有任何说明,因此您可以使用任何您喜欢的方式。
就可读性而言,其他答案遗漏的东西是您可以像这样直接声明一个集合:
if my_variable in {2, 'A', None}:
print(True)
tuple
是不可变序列,而list
是可变序列,这意味着元组不能更改,但列表可以。
如果您不想修改正在签in
的数据结构,请使用tuple
,否则使用 list,否则两者的行为相同。
my_variable = 'A'
if my_variable in [2, 'A', None]:
print(True)
if my_variable in (2, 'A', None):
print(True)
输出将是
True
True
请注意,列表和元组都有O(n)
时间复杂度要检查,要获得平均O(1)
复杂度,请使用集合。
if my_variable in set([2, 'A', None]):
print(True)
#True
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.