检查列表中的所有元素是否相同我需要以下功能:输入*alist输出量:True如果输入列表中的所有元素使用标准相等运算符计算为相等;False不然的话。性能:当然,我不愿意承担任何不必要的开销。我觉得最好是:遍历列表比较相邻元素和AND所有结果的布尔值但我不知道什么是最有效的方法。编辑:谢谢你给我这么好的答案。我对几个问题进行了评估,很难在@KennyTM和@Ivo van der Wijk解决方案之间做出选择。短路特性的缺乏只会对长输入(超过50个元件)造成伤害,而这些输入在早期就有不相等的元件。如果这种情况发生得足够频繁(取决于列表的长度),则需要短路。最好的短路算法似乎是@KennyTM。checkEqual1..但是,它为此付出了很大的代价:性能最高可达20倍-几乎相同的列表在短名单上的性能最高可达2.5倍如果早期不平等元素的长输入没有发生(或很少发生),则不需要短路。到目前为止,最快的是@IvovanderWijk解决方案。
3 回答
一只甜甜圈
TA贡献1836条经验 获得超5个赞
一个比使用在序列(而不是可迭代的)上工作的set()更快的解决方案是简单地计算第一个元素。这假设列表是非空的(但这是很简单的检查,并决定自己的结果应该在一个空的列表上)
x.count(x[0]) == len(x)
一些简单的基准:
>>> timeit.timeit('len(set(s1))<=1', 's1=[1]*5000', number=10000)
1.4383411407470703
>>> timeit.timeit('len(set(s1))<=1', 's1=[1]*4999+[2]', number=10000)
1.4765670299530029
>>> timeit.timeit('s1.count(s1[0])==len(s1)', 's1=[1]*5000', number=10000)
0.26274609565734863
>>> timeit.timeit('s1.count(s1[0])==len(s1)', 's1=[1]*4999+[2]', number=10000)
0.25654196739196777
动漫人物
TA贡献1815条经验 获得超10个赞
all(x==myList[0] for x in myList)
添加回答
举报
0/150
提交
取消