This question询问如何确定列表中的每个元素是否相同。如何以合理有效的方式确定列表中95%的元素是否相同?例如:
>>> ninety_five_same([1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1])
True
>>> ninety_five_same([1,1,1,1,1,1,2,1]) # only 80% the same
False
由于列表可能非常大,因此这将需要有点效率。
最佳答案
实际上,对于类似的问题,有一个简单的线性解决方案,只有50%的约束而不是95%的约束。 Check this question,仅是几行代码。
它也将为您工作,只有最后您检查所选元素是否满足95%阈值,而不是50%。 (不过,正如 Thilo 所指出的,如果已经有了currentCount >= n*0.95
,则没有必要。)
我还将从 st0le 的答案中发布Python代码,向所有人展示这有多么困难。
currentCount = 0
currentValue = lst[0]
for val in lst:
if val == currentValue:
currentCount += 1
else:
currentCount -= 1
if currentCount == 0:
currentValue = val
currentCount = 1
如果您正在寻找解释,我认为 Nabb 已经有了the best one。