Python从字符串提取整数浮点数排序并获取位置的代码问题排查
问题原因解析
- 二维列表输出问题:你在向
list_float追加元素时,额外给数值套了一层列表包装([float(x)]/[int(x)]),导致每个元素都是子列表,最终输出二维结构。 - find返回-1问题:首先此时
x是子列表,str(x)得到的是类似"[32.23]"的带方括号字符串,原字符串中不存在对应内容;其次你排序后丢失了提取的数字字符串与原位置的对应关系,就算解决了子列表问题,遇到重复数字时也只能匹配到第一个出现的位置,结果不准确。
可行解决方案
推荐使用正则表达式直接匹配数字,匹配过程中同时记录位置信息,再按数值排序,避免对应关系丢失。
修改后代码如下:
import re input_str = '123klja32.23alk543$^&d' # 匹配整数和浮点数的正则 pattern = re.compile(r'\d+\.?\d*') # 存储(数值, 起始下标, 长度) match_results = [] for match in pattern.finditer(input_str): num_str = match.group() start_idx = match.start() length = len(num_str) # 转换数值类型 if '.' in num_str: num = float(num_str) else: num = int(num_str) match_results.append((num, start_idx, length)) # 按数值升序排序 match_results.sort(key=lambda x: x[0]) # 提取结果列表 number_list = [item[0] for item in match_results] # 若示例中的location第二个值为结束下标,将下方item[2]改为item[1]+item[2]即可 location_list = [[item[1], item[2]] for item in match_results] print("number_list =", number_list) print("location_list =", location_list)
运行后输出与示例要求完全匹配:
number_list = [32.23, 123, 543] location_list = [[7, 5], [0, 3], [15, 3]]
内容的提问来源于stack exchange,提问作者Doyeon.K
相关产品推荐
相关产品推荐

