You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从字符串中提取位数出现频率最高的所有整数与浮点数

实现方案(Python版本)

核心思路

  • 第一步:用正则表达式从原字符串中提取所有符合规则的整数、浮点数字符串
  • 第二步:统计每个数字的有效位数(去掉小数点后的字符长度,完全匹配示例中的计数规则)
  • 第三步:计算所有位数的出现频率,找到出现频率最高的位数
  • 第四步:筛选出所有符合最高位数的数字,输出结果

完整实现代码

import re
from collections import Counter

def get_most_frequent_length_numbers(input_str):
    # 匹配所有整数、浮点数,不需要支持负数的话可以去掉开头的-?
    num_pattern = r'-?\d+\.?\d*'
    num_matches = re.findall(num_pattern, input_str)
    
    # 统计每个数字的有效长度和各长度的出现频率
    len_counter = Counter()
    num_len_map = {}
    for num_str in num_matches:
        # 去掉小数点后计算长度,符合需求的计数规则
        valid_length = len(num_str.replace('.', ''))
        num_len_map[num_str] = valid_length
        len_counter[valid_length] += 1
    
    # 定位出现频率最高的位数
    max_freq = max(len_counter.values())
    target_lengths = [k for k, v in len_counter.items() if v == max_freq]
    
    # 转换为对应数值类型后返回结果
    result = []
    for num_str in num_matches:
        if num_len_map[num_str] in target_lengths:
            result.append(float(num_str) if '.' in num_str else int(num_str))
    return result

测试验证

整数场景测试

str_int = "I'm 35, and I have 2 kids ages 10 and 12"
print(get_most_frequent_length_numbers(str_int))
# 输出:[35, 10, 12]

浮点数场景测试

str_float = "I'm 35.055, and I have 2.100 kids ages 10.0 and 12.505"
print(get_most_frequent_length_numbers(str_float))
# 输出:[35.055, 12.505]

可调整规则说明

  • 如果需要把负号计入数字长度,可以修改有效长度的计算逻辑,去掉replace步骤直接取原字符串长度即可
  • 如果出现多个位数频率相同的情况,当前代码会返回所有最高频率对应的数字,可根据需求调整为优先取最长位数、最短位数等逻辑

内容的提问来源于stack exchange,提问作者yair_elmaliah

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 21:15:03