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

如何将特定格式字符串转换为fractions模块的二维Fraction对象列表

嘿,这个需求其实用Python的ast模块配合fractions.Fraction就能优雅解决,完全不用手动去剥括号、分割字符串那种繁琐操作,而且能完美处理各种空格格式问题!

核心思路

  1. 用ast.literal_eval解析字符串:它能自动忽略所有不规则的空格,把字符串安全地转换成Python原生的嵌套列表结构,不管里面的元素是整数、小数还是分数形式的字符串。
  2. 递归遍历原生列表,把每个元素转换成Fraction对象:Fraction的构造函数接受字符串形式的整数、小数、分数,能自动完成转换。

完整代码实现

import ast
from fractions import Fraction

def str_to_fraction_matrix(s):
    # 第一步:解析字符串为原生嵌套列表
    raw_matrix = ast.literal_eval(s)
    
    # 递归转换每个元素为Fraction
    def convert_element(item):
        if isinstance(item, list):
            return [convert_element(sub_item) for sub_item in item]
        else:
            # 把元素转成字符串再传给Fraction,兼容int、float、分数字符串
            return Fraction(str(item))
    
    return convert_element(raw_matrix)

测试示例

# 测试带各种空格的输入
test_case1 = '[[2, 3.1], [4/5, 5/6]]'
test_case2 = '[[ 2   ,3.1],[4/5,   5/6 ]]'
test_case3 = '[[2,3.1],[4/5,5/6]]'

print(str_to_fraction_matrix(test_case1))
# 输出:[[Fraction(2, 1), Fraction(31, 10)], [Fraction(4, 5), Fraction(5, 6)]]
print(str_to_fraction_matrix(test_case2))
# 输出和上面完全一致
print(str_to_fraction_matrix(test_case3))
# 输出同样一致

为什么这个方法更高效简洁?

  • 自动处理空格:ast.literal_eval完全不需要我们关心空格的位置和数量,它会按照Python的语法规则正确解析列表结构,比手动写分割逻辑可靠太多,还能避免各种边界错误。
  • 一键转换Fraction:Fraction(str(item))能无缝处理整数、小数、分数字符串三种输入,省去了我们判断元素类型再分别处理的麻烦。
  • 安全可靠:和eval不同,ast.literal_eval只会解析字面量结构,不会执行任何恶意代码,生产环境用起来也放心。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:21:48