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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 23:45:03