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

基于Python 3的SMILES字符串最大数字快速查找方案问询

寻找SMILES字符串中最大数字的最优实现方案

我正在处理SMILES(分子的字符串表示格式,使用配对数字表示环结构),数据集规模达190万条字符串。通过SMILES随机化的数据增强流程,每条原始SMILES可生成多达3万条等效字符串,最终待处理字符串量接近1000亿条。需要找到最快的方法在SMILES字符串中查找最大数字。

需考虑的SMILES特性:

  • 数字"0"始终被排除,目前未发现超过6的数字,但理论上可达9
  • 部分SMILES无环结构,不含数字

已测试的实现函数

函数1:遍历字符逐个判断

def find_biggest_digits_1(smiles=str()):
    """
    遍历SMILES字符串,判断字符是否为数字,转成整数后记录最大值
    """
    max_digit = 0 

    for character in smiles:
        if character.isdigit():
            digit = int(character)
            if digit > max_digit:
                max_digit = digit
    
    return max_digit

函数2:从大到小检查数字是否存在

def find_biggest_digits_2(smiles=str()):
    """
    从9到1依次检查数字是否存在于字符串中,找到第一个存在的数字即为最大值
    """
    max_digit = 0 

    for i in range(1,10):
        digit = 10 - i
        if smiles.find(str(digit)) != -1:
            max_digit = digit
            break
    
    return max_digit

性能测试结果

单条SMILES测试

  • 函数1:2.14µs±64ns
  • 函数2:1.96µs±78.2ns

多进程处理190万条数据

  • 函数1:1.37s±69ms
  • 函数2:1.34s±50.8ms

已尝试的优化方案

优化方案1(find_biggest_digits_1_b):找到9时提前终止

  • 单条测试耗时:2.12µs±30.5ns
  • 多进程处理耗时:1.42s±77.3ms

优化方案2(find_biggest_digits_3):生成器+try-except实现

  • 单条测试耗时:2.51µs±83.8ns
  • 多进程处理耗时:1.5s±92ms

现寻求性能更优的实现方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 23:12:51