python - 将字符串一分为二并将两个元素都匹配到一系列值
问题描述
问题
我有一个数据库,其中一个表包含加密货币元数据,例如它的股票代码。为了这个问题,假设它包括:
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% 准确(因为无论如何都不建议字符串连接开始)。
解决方案
只是制作一个包含所有可能组合的大字典,然后随时检索结果如何?通过这种方式,您不必为每次拆分代码的尝试一次又一次地进行所有计算。
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']
推荐阅读
- react-native - 在本机反应中输入一些输入值后禁用文本输入
- c# - 如何验证浮点数不是“0”
- python - 动态添加到 Tkinter Text() (Python)
- c# - BitMiracle/libtiff.net 通过压缩将页面复制到其他 tiff
- sql - Oracle sql,plsql 创建一个构建变量的 sql
- c++ - 如何在 Visual Studio 中调试 ITK c++ 代码?
- git - Refspec 消除本地和远程标签以及同名分支的歧义?
- python - Python 程序 50% 的时间无法执行
- python - Python PEP8:在多行导入时忽略单个导入
- google-cloud-dataflow - 不同的引发错误(llegalStateException:GroupByKey 的 keyCoder 必须是确定性的)