8
对于内置Python容器(list
,tuple
,等等)in
运算符相当于any(y == item for item in container)
需要提醒的是前一种方法更快(漂亮):Python列表是否具有与__contains__等效的测试身份的功能?
In [13]: container = range(10000)
In [14]: %timeit (-1 in container)
1000 loops, best of 3: 241 us per loop
In [15]: %timeit any(-1 == item for item in container)
1000 loops, best of 3: 1.2 ms per loop
是否有一个相当于any(y is item for item in container)
?也就是说,使用is
而不是==
的测试?
事实上,我一直认为这是一个文档的缺陷,方法'list.index'和'list.count'等说几句,大意“如果没有这样的项目“ – mgilson 2012-08-15 14:40:28
”,则返回第一个项目列表中的索引,但是即使对于集合,“in”也检查不保证*的散列值对象是不同的。考虑'a =(1,2,3); C =(1,2,3); c是a; s = set([a]); c in s'。尽管目前我想不出一个重要的时间。 – mgilson 2012-08-15 14:47:55
没有,只是指出在set和dicts中的'in'运算符没有* do *扫描。 – 2012-08-15 14:49:24