Python中`if a in [1, 2, 3]`这样写符合规范吗?
a 这个变量的类型,可能是字符串,也可能是整数,要判断 a 是不是在一个整数列表中,直接这样写:
if a in [1, 2, 3]:
pass
虽然系统不报错,是否符合 Python 规范? 有没有必要在这之前判断 a 是否 int 或 str ?
Python中`if a in [1, 2, 3]`这样写符合规范吗?
肯定不用,你只是判断 a 是不是在 list 中,这跟 a 是什么类型一点关系都没有,python<br>In [2]: lst = [1, 2, 3, "4"]<br><br>In [3]: for a in lst:<br> ...: print type(a)<br> ...:<br><type 'int'><br><type 'int'><br><type 'int'><br><type 'str'><br>
就好比说,你是不是中国人,跟你是哪里的人、男人女人都没关系
这么写完全符合规范,在Python里是常见写法。
if a in [1, 2, 3] 检查变量 a 是否存在于列表 [1, 2, 3] 中。它清晰、直接,对于静态的、小规模集合(比如几个选项或状态码)特别合适。很多开源项目和PEP(Python增强提案)里都能看到这种用法。
不过,如果列表比较大或者检查很频繁,用集合 {1, 2, 3} 或元组 (1, 2, 3) 在性能上会更好,因为集合的成员测试平均是O(1),而列表是O(n)。但就代码风格和可读性而言,你原来的写法没有任何问题,Python社区普遍接受。
总结:小列表直接用没问题。
不存在你想象中的规范,只看符不符合你的意图。
数组里的元素可以是不同类型,a 也可以是任何类型,都是合法的。
有个需要注意的细节。被坑过一次。
False == 0
所以 False in [0, ] 会返回 True
语法上看 没问题
如果整数列表比较大,并且经常使用的话,推荐用变量保存一个 set
没问题,符合规范,不用检查。
但是用 tuple 更快一点,<br>if a in (1,2,3):<br> pass<br>
为什么用 tuple 回更快?
tuple 不可变,适合用于常量
tuple 构建的时候比 list 快,数据结构的原因。
循环的时候速度一样
https://www.google.com/search?q=why+tuple+is+faster+than+list&oq=why+tuple+is+faster+than+&aqs=chrome.1.69i57j0l2.6360j0j1&sourceid=chrome&ie=UTF-8
没毛病,Python 的 in 用的是==比较。
>>> a = [1]
>>> b = a[:]
>>> b is a
False
>>> c = [a,a]
>>> a in c
True
>>> b in c
True

