我有一个很长的列表(300 000 个元素),我想检查该列表中的每个元素是否存在超过 5 次。所以最简单的代码是
[x for x in x_list if x_list.count(x) > 5]
但是,我不需要统计x在列表中出现的频率,我可以在达到至少5个元素后停止计数吗? 我也不需要遍历 x_list 中的所有元素,因为我有可能在遍历列表时已经更早地检查了值 x。 知道如何获得此代码的最佳版本吗? 我的输出应该是一个列表,如果可能,顺序相同......
最佳答案
下面是基于Counter
的解决方案:
from collections import Counter
items = [2,3,4,1,2,3,4,1,2,1,3,4,4,1,2,4,3,1,4,3,4,1,2,1]
counts = Counter(items)
print(all(c >= 5 for c in counts.values())) #prints True
如果我用
items = [random.randint(1,1000) for i in range(300000)]
基于计数器的解决方案仍然是零点几秒。
关于python - 检查值是否比列表中的 X 更频繁地存在的最快方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42869827/