加快代码速度

时间:2016-02-16 15:49:07

标签: python performance

我正在尝试加速以下代码。程序应该在字符串中找到普遍的数字。这是一个数字,它出现在字符串中超过

  

LEN(字符串)/ 2

次。挑战在于输入文件由随机数量的字符串组成,每个字符串可以包含数千个数字。我尝试过蛮力方法

for line in lst:
    nline = line.split(',')
    m = [i for i in nline if nline.count(i) > len(nline)/2]
    print(m[0] if len(m) > 0 else "None")

它产生了大约10秒的运行时间。

最快的版本运行约0.8秒

for line in lst:
    nline = line.split(',')
    d = collections.Counter(nline)
    n = dict()
    m = [i for i, n in d.items() if n > len(nline)/2]
    print(m[0] if len(m) > 0 else "None")

有没有办法进一步提高绩效?

1 个答案:

答案 0 :(得分:1)

我想我会使用.most_common(1)

collections.Counter成员函数
for line in lst:
    ...
    d = collections.Counter(nline)
    m = d.most_common(1)
    print( "None" if m is None else m[0] )

请参阅:https://docs.python.org/3/library/collections.html#collections.Counter.most_common

虽然我认为没有太多的速度可以获得。繁重的工作是nline中所有元素的频率计数。