成員運算符
成員運算符的目的:用於判斷一個元素是否在容器中
成員運算符:返回的是bool
- in
- not in
In [68]: 3 in [1, 2 ,3 ,4 ]
Out[68]: True
In [69]: 10 in [1, 2, 3, 4]
Out[69]: False
In [71]: 10 not in [1, 2, 3, 4]
Out[71]: True
In [72]: 'love' in 'i love python'
Out[72]: True
成員運算符的複雜程度
集合的成員運算符和其他的線性結構的時間複雜度不同
成員運算:
- 集合O(1)
- 列表(其他線性結構)O(n)
總結:
- 做成員運算的時候, 集合的效率遠高於列表
- 做成員運算時, 運算的效率和列表的規模有關
- 做成員運算時, 集合的效率和集合的規模無關。
In [74]: lst = list(range(10000))
In [75]: s = set(range(10000))
In [76]: %%timeit
...: -1 in lst
...:
10000 loops, best of 3: 125 µs per loop
In [77]: %%timeit # 更快
...: -1 in s
...:
The slowest run took 39.70 times longer than the fastest. This could mean that an intermediate result is being cached.
10000000 loops, best of 3: 45 ns per loop
做成員運算的時候, 集合的效率遠高於列表
In [78]: lst2 = list(range(100))
In [79]: %%timeit
...: -1 in lst2
...:
1000000 loops, best of 3: 1.29 µs per loop
做成員運算時, 運算的效率和列表的規模有關
In [80]: s2 = set(range(100))
In [81]: %%timeit
...: -1 in s2
...:
10000000 loops, best of 3: 39.1 ns per loop
做成員運算時, 集合的效率和集合的規模無關。