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

Python如何将列表/字符串拆分为成对元组并解决数值转换报错

问题修复方案

报错根因

  1. 类型转换错误:你的坐标序列中存在带小数点的浮点格式数值(比如22943.23),直接调用int()转换会触发格式错误,统一转为float即可,整数数值转float不会丢失精度。
  2. 配对逻辑错误:原代码用zip(data[:-1], data[1:])会将所有相邻元素两两配对,最终会生成11个冗余元组,不符合每两个数值配对的需求,需要按步长2切片分别取奇、偶位置的元素配对。

修复代码

基础版本(统一为float类型)

ip='MDSYS.SDO_GEOMETRY(2003, NULL, NULL, MDSYS.SDO_ELEM_INFO_ARRAY(1, 1003, 1), MDSYS.SDO_ORDINATE_ARRAY(22027, 22943.23, 22026, 22939, 22025, 22936, 22025.09, 22932, 22027, 22929, 22030, 22926)'
split_string_1 = "MDSYS.SDO_ORDINATE_ARRAY("
split_string_2 = ")"

# 统一转换为浮点类型
data = list(map(float, ip.split(split_string_1)[1].split(split_string_2)[0].split(", ")))

# 按步长2切片配对
result = list(zip(data[::2], data[1::2]))

精度匹配版本(整数保留int、小数保留float,和预期输出完全一致)

ip='MDSYS.SDO_GEOMETRY(2003, NULL, NULL, MDSYS.SDO_ELEM_INFO_ARRAY(1, 1003, 1), MDSYS.SDO_ORDINATE_ARRAY(22027, 22943.23, 22026, 22939, 22025, 22936, 22025.09, 22932, 22027, 22929, 22030, 22926)'
split_string_1 = "MDSYS.SDO_ORDINATE_ARRAY("
split_string_2 = ")"

def parse_num(s):
    try:
        return int(s)
    except ValueError:
        return float(s)

data = list(map(parse_num, ip.split(split_string_1)[1].split(split_string_2)[0].split(", ")))
result = list(zip(data[::2], data[1::2]))

输出结果

运行上述代码后得到的result和你预期的输出完全一致:

[(22027, 22943.23), (22026, 22939), (22025, 22936), (22025.09, 22932), (22027, 22929), (22030, 22926)]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.16 14:54:03