a 这个变量的类型,可能是字符串,也可能是整数,要判断 a 是不是在一个整数列表中,直接这样写:
if a in [1, 2, 3]:
pass
虽然系统不报错,是否符合 Python 规范? 有没有必要在这之前判断 a 是否 int 或 str ?
1
Meli55a 2017-09-09 19:44:56 +08:00 1
肯定不用,你只是判断 a 是不是在 list 中,这跟 a 是什么类型一点关系都没有,
```python In [2]: lst = [1, 2, 3, "4"] In [3]: for a in lst: ...: print type(a) ...: <type 'int'> <type 'int'> <type 'int'> <type 'str'> ``` 就好比说,你是不是中国人,跟你是哪里的人、男人女人都没关系 |
2
kkzxak47 2017-09-09 19:55:50 +08:00 2
不存在你想象中的规范,只看符不符合你的意图。
数组里的元素可以是不同类型,a 也可以是任何类型,都是合法的。 |
3
lxy 2017-09-09 20:19:33 +08:00 1
有个需要注意的细节。被坑过一次。
False == 0 所以 False in [0, ] 会返回 True |
4
yemenchun1 2017-09-09 20:43:52 +08:00 via iPhone
语法上看 没问题
|
5
NoAnyLove 2017-09-09 22:38:56 +08:00
如果整数列表比较大,并且经常使用的话,推荐用变量保存一个 set
|
6
scriptB0y 2017-09-10 12:24:02 +08:00
没问题,符合规范,不用检查。
但是用 tuple 更快一点, ``` if a in (1,2,3): pass ``` |
9
scriptB0y 2017-09-10 23:26:20 +08:00 1
@NoAnyLove 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 |
10
flyingghost 2017-09-11 10:18:09 +08:00
@lxy 没毛病,Python 的 in 用的是==比较。
>>> a = [1] >>> b = a[:] >>> b is a False >>> c = [a,a] >>> a in c True >>> b in c True |