字符串中出现次数最多的数字的频率

Frequency of most frequent number in a string

假设我有一个这样的字符串:

sentence = 'I am 6,571.5 14 a 14 data 1,a211 43.2 scientist 1he3'

我想输出字符串中出现频率最高的数字。

在上面的字符串中,2 对应于字符串中出现频率最高的数字 14

当我说数字时,我指的是仅由数字和 ,. 组成的东西,它由空格分隔。

因此,在上面的字符串中,唯一的数字是:6,571.5141443.2.

(请记住,不同的国家/地区使用 ,. 的方式与小数和千位相反,所以我想考虑所有这些可能的情况)

我怎样才能有效地做到这一点?

P.S.

有趣的是发现 Python 中没有(非常)快速的方法来测试一个单词是否是一个数字(包括关于 [=13 的不同约定的整数和浮点数) =] 和 .).

你可以试试:

from collections import Counter
import re

pattern = '\s*?\d+[\,\.]\d+[\,\.]\d+\s*?|\s*?\d+[\,\.]\d+\s*?|\s[0-9]+\s'
sentence = 'I am 6,571.5 14 a 14 data 1,a211 43.2 scientist 1he3'
[(_ , freq)] = Counter(re.findall(pattern, sentence)).most_common(1)
print(freq)

# output: 2

或者您可以使用:

def simple(w):
    if w.isalpha():
        return False

    if w.isnumeric():
        return True

    if w.count('.') > 1 or w.count(',') > 1:
        return False

    if w.startswith('.') or w.startswith(','):
        return False

    if w.replace(',', '').replace('.', '').isnumeric():
        return True

    return False

[(_ , freq)] = Counter([w for w in sentence.split() if simple(w)]).most_common(1)
print(freq)

# output: 2

但是第二个解决方案慢了 ~ 2 倍