使用“in”运算符,括号与大括号

时间:2017-04-08 06:37:06

标签: python python-3.x

以下是跨多个值检查变量的简单示例:

var = "a"
if var == "a" or var == "b" or var == "c":
    print("true")
else:
    print("false")

经过一次小小的研究,我found另一个更为先进的方法,Martijn Pieters:

var = "a"
if var in {"a", "b", "c"}:
    print("true")
else:
    print("false")

但是,在我上面发布的链接中,声明括号也可以接受:

if var in ("a", "b", "c"):

这里的花括号{...}(...)括号有什么区别?

如果有可能回答,最好的是什么?

2 个答案:

答案 0 :(得分:2)

{...}创建一个集合,而(...)将为您创建一个元组(实际的元组创建标记是逗号(,))。对于小数据,可能没有明显的差异。

使用set进行in检查时,会计算var的哈希值并将其用作索引的基础,而在使用元组进行成员资格测试时,会从元组搜索元组从找到或找不到var开始。

答案 1 :(得分:1)

第一个,即{...}表示/创建set,使用in设置您正在执行设置成员资格操作,结果为O(1)复杂性。

另一方面,

(...)表示/创建tuple。在in中搜索tuple成员身份的成员资格为O(N),因为它会检查tuple中的每个元素,以检查是否匹配。

在像你这样的小案例中,这可能会带来很大的不同(除非是在一个紧密的循环中)。一般来说,您应该更喜欢{...},因为它不是很难打字并且有效率。