字符串中出现次数最多的数字的频率
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.5
、14
、14
、43.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 倍
假设我有一个这样的字符串:
sentence = 'I am 6,571.5 14 a 14 data 1,a211 43.2 scientist 1he3'
我想输出字符串中出现频率最高的数字。
在上面的字符串中,2
对应于字符串中出现频率最高的数字 14
。
当我说数字时,我指的是仅由数字和 ,
或 .
组成的东西,它由空格分隔。
因此,在上面的字符串中,唯一的数字是:6,571.5
、14
、14
、43.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 倍