首页 > 解决方案 > 将字符串一分为二并将两个元素都匹配到一系列值

问题描述

问题

我有一个数据库,其中一个表包含加密货币元数据,例如它的股票代码。为了这个问题,假设它包括:

meta = ['BTC', 'LTC', 'ETH', 'BNB', 'USDT', 'BUSD', 'ATOM', 'SC', '0X', 'WAVES']

Tickers 有几种不同的字符串长度,当它们被隔离显示时,很容易从数据集中连接字符串以将它们的 id 存储在我的数据库中。

但是,当从交易所导入交易历史时,代码是成对出现的,例如:

thist = ['BTCUSDT', 'SCUSDT', 'SCBTC', 'ATOMBTC', 'WAVESBTC', 'WAVESUSDT']

可以设置任意位置(即字符串的中间)来分隔一对中的每个“一半”,但只要每个元素的长度相差 2 或更多(例如,WAVESBTC 和 0XUSDT 永远不会工作),它就会失败在这种情况下)。


所需的输出

我已经实现了一种将一对字符串“分解”为所有可能组合并针对序列输出匹配组合的方法seq

def check_string(string, seq):
    ll = []

    for i in range(len(string)):
        if i > 0:
            t = (string[:i], string[i:])
            ll.append(t)

    return [i for i in ll if all(x in seq for x in i)]

但是,我正在寻找改进此功能的方法,使其不依赖于迭代字符串和附加列表。itertools想到了combinations,但它的纯粹实现只会生成单个字符的组合,而不是不同大小的字符串切片。有任何想法吗?


Obs:显然,问题仅限于数据库中有唯一的代码,鉴于那里有大量的加密货币,这在现实世界中不会发生。但是对于这个问题,我更感兴趣的是实现一种最佳方式来获得“匹配”组合,而不是 100% 准确(因为无论如何都不建议字符串连接开始)。

标签: pythonsplit

解决方案


只是制作一个包含所有可能组合的大字典,然后随时检索结果如何?通过这种方式,您不必为每次拆分代码的尝试一次又一次地进行所有计算。

meta = ['BTC', 'LTC', 'ETH', 'BNB', 'USDT', 'BUSD', 'ATOM', 'SC', '0X', 'WAVES']

split_crypto = {x + y: [x, y] for x in meta for y in meta}

print(split_crypto['BTCUSDT']) # ['BTC', 'USDT']

推荐阅读