Python条件语句与列表匹配问题:双条件匹配失效排查
双条件匹配加密货币交易对的Python实现问题
已知数据
两个交易对列表:
mexc_names = ['ogn_usdt','qnt_usdt','btc_tryb','sbr_usdt','kton_eth','kton_eth','kton_eth'] kraken_names = ['ognusd','qnteur','aaveeth','sbrusd','aaveeth','adaeth','algoeth']
已实现的单条件匹配
此前实现了单前缀匹配:遍历kraken_names,若mexc_names中元素下划线前的前缀存在于kraken元素中,则输出配对:
for x in mexc_names: for y in kraken_names: if x.partition("_")[0] in y: print(x,y)
输出结果:
ogn_usdt ognusd qnt_usdt qnteur sbr_usdt sbrusd
需求与错误尝试
需要实现双条件匹配:仅当mexc元素下划线前的前缀和下划线后的后缀同时存在于同一个kraken元素中时,才输出配对。
错误尝试的代码:
for x in mexc_names: for y in kraken_names: if (x.partition("_")[0] and x.partition("_")[2]) in y: print(x,y)
错误原因:(a and b) in y是逻辑写法错误,Python中a and b会返回b(当a为非空字符串时),实际仅判断了后缀是否在y中,因此得到错误结果:
kton_eth adaeth kton_eth algoeth ...
正确实现方案
核心是分别判断前缀和后缀是否同时存在于目标字符串中,同时提前拆分前缀和后缀避免重复计算:
for x in mexc_names: # 拆分前缀、分隔符、后缀,仅取前缀和后缀 prefix, _, suffix = x.partition("_") # 处理后缀缩写(比如usdt对应usd),可根据实际需求调整 trimmed_suffix = suffix[:3].lower() for y in kraken_names: y_lower = y.lower() # 同时满足前缀和处理后的后缀都在kraken元素中 if prefix.lower() in y_lower and trimmed_suffix in y_lower: print(x, y)
输出结果
ogn_usdt ognusd sbr_usdt sbrusd
补充说明
- 若不需要处理后缀缩写(比如严格匹配完整后缀),直接用
if prefix in y and suffix in y即可 - 加入大小写转换是为了避免大小写差异导致的匹配失败,可根据交易对命名规则决定是否保留
内容的提问来源于stack exchange,提问作者Caleb Lucas
相关产品推荐
相关产品推荐

