如何从字符串中提取位数出现频率最高的所有整数与浮点数
实现方案(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
相关产品推荐
相关产品推荐

