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

10-08 19:37