栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Python-检查列表中的所有元素是否相同

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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]

这三个版本之间的区别在于:

  1. checkEqual2
    内容中必须是可哈希的。
  2. checkEqual1
    并且
    checkEqual2
    可以使用任何迭代器,但checkEqual3必须接受序列输入,通常是列表或元组之类的具体容器。
  3. checkEqual1
    发现差异后立即停止。
  4. 由于
    checkEqual1
    包含更多的Python代码,因此当许多项目在开始时相等时效率较低。
  5. 由于
    checkEqual2
    checkEqual3
    始终执行O(N)复制操作,因此,如果你的大多数输入将返回False,它们将花费更长的时间。
  6. 对于
    checkEqual2
    checkEqual3
    很难适应从
    a == b
    到的比较
    a is b

timeit
结果,对于Python 2.7和(仅s1,s4,s7,s9应该返回True)

s1 = [1] * 5000s2 = [1] * 4999 + [2]s3 = [2] + [1]*4999s4 = [set([9])] * 5000s5 = [set([9])] * 4999 + [set([10])]s6 = [set([10])] + [set([9])] * 4999s7 = [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


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/410986.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号