python比较列表所有项是否有相同的部分_检查列表中的所有元素是否相同
一般方法:
def checkEqual1(iterator):
iterator = iter(iterator)
try:
first = next(iterator)
except StopIteration:
return True
return all(first == rest for rest in iterator)
單線:
def checkEqual2(iterator):
return len(set(iterator)) <= 1
還有一條線:
def checkEqual3(lst):
return lst[1:] == lst[:-1]
這三個版本的不同之處在于:
在……里面checkEqual2內容必須是可理解的。
checkEqual1和checkEqual2可以使用任何迭代器,但是checkEqual3必須接受序列輸入,通常是具體的容器,如列表或元組。
checkEqual1一旦發現差異就會停止。
自checkEqual1包含更多的Python代碼,當許多項在開始時相等時,效率就會降低。
自checkEqual2和checkEqual3始終執行O(N)復制操作,如果大多數輸入返回false,則它們將花費更長的時間。
為checkEqual2和checkEqual3很難適應比較a == b到a is b.
timeit結果,對于Python2.7和(只有S1、S4、S7、S9應該返回True)
s1 = [1] * 5000
s2 = [1] * 4999 + [2]
s3 = [2] + [1]*4999
s4 = [set([9])] * 5000
s5 = [set([9])] * 4999 + [set([10])]
s6 = [set([10])] + [set([9])] * 4999
s7 = [1,1]
s8 = [1,2]
s9 = []
我們得到
| checkEqual1 | checkEqual2 | checkEqual3? | checkEqualIvo | checkEqual6502 |
|-----|-------------|-------------|--------------|---------------|----------------|
| s1? | 1.19? ?msec | 348? ? usec | 183? ? ?usec | 51.6? ? usec? | 121? ? ?usec? ?|
| s2? | 1.17? ?msec | 376? ? usec | 185? ? ?usec | 50.9? ? usec? | 118? ? ?usec? ?|
| s3? | 4.17? ?usec | 348? ? usec | 120? ? ?usec | 264? ? ?usec? | 61.3? ? usec? ?|
|? ? ?|? ? ? ? ? ? ?|? ? ? ? ? ? ?|? ? ? ? ? ? ? |? ? ? ? ? ? ? ?|? ? ? ? ? ? ? ? |
| s4? | 1.73? ?msec |? ? ? ? ? ? ?| 182? ? ?usec | 50.5? ? usec? | 121? ? ?usec? ?|
| s5? | 1.71? ?msec |? ? ? ? ? ? ?| 181? ? ?usec | 50.6? ? usec? | 125? ? ?usec? ?|
| s6? | 4.29? ?usec |? ? ? ? ? ? ?| 122? ? ?usec | 423? ? ?usec? | 61.1? ? usec? ?|
|? ? ?|? ? ? ? ? ? ?|? ? ? ? ? ? ?|? ? ? ? ? ? ? |? ? ? ? ? ? ? ?|? ? ? ? ? ? ? ? |
| s7? | 3.1? ? usec | 1.4? ? usec | 1.24? ? usec | 0.932? ?usec? | 1.92? ? usec? ?|
| s8? | 4.07? ?usec | 1.54? ?usec | 1.28? ? usec | 0.997? ?usec? | 1.79? ? usec? ?|
| s9? | 5.91? ?usec | 1.25? ?usec | 0.749? ?usec | 0.407? ?usec? | 0.386? ?usec? ?|
注:
# http://stackoverflow.com/q/3844948/
def checkEqualIvo(lst):
return not lst or lst.count(lst[0]) == len(lst)
# http://stackoverflow.com/q/3844931/
def checkEqual6502(lst):
return not lst or [lst[0]]*len(lst) == lst
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的python比较列表所有项是否有相同的部分_检查列表中的所有元素是否相同的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python的基础命令_Python必学
- 下一篇: 别做操之过急的”无效将军”,做实实在在的