技术问询:实现从列表筛选含指定子串的字符串功能
需求:从列表b中筛选包含列表a元素的字符串
需求概述
给定两个列表a和b,需要生成列表c,其中包含b中所有包含a里任意元素作为子串的字符串。
示例1
输入:
a = ['apple', 'banana', 'orange'] b = ['TOR_apple_impact', 'TOR_apple_staging', 'TOR_banana_impact', 'TOR_banana_STAGING', 'TOR_orange_IMPACT', 'TOR_orange_STAGING']
输出:
c = ['TOR_apple_impact', 'TOR_apple_staging', 'TOR_banana_impact', 'TOR_banana_STAGING', 'TOR_orange_IMPACT', 'TOR_orange_STAGING']
示例2
输入:
a = ['apple', 'banana'] b = ['TOR_apple_impact', 'TOR_apple_staging', 'TOR_banana_impact', 'TOR_banana_STAGING', 'TOR_orange_IMPACT', 'TOR_orange_STAGING']
输出:
c = ['TOR_apple_impact', 'TOR_apple_staging', 'TOR_banana_impact', 'TOR_banana_STAGING']
你的尝试代码
你目前写的代码是这样的:
def build_systems_to_query(self, source_systems): systems_to_query = [] for i in source_systems: systems_to_query.append('TOR' + '_' + i) systems_to_query.append('TOR' + '_' + i) return systems_to_query
这段代码的问题是它只是在生成带TOR_前缀的重复字符串,并没有实现从列表b中筛选符合条件元素的核心逻辑。
正确实现方案
这里提供两种简洁高效的实现方式:
方式1:循环遍历筛选
逻辑清晰,适合新手理解:
def filter_list_b(a, b): c = [] for item in b: # 检查当前item是否包含a中的任意关键词 for keyword in a: if keyword in item: c.append(item) break # 找到匹配就停止检查当前item的其他关键词 return c
方式2:列表推导式(更简洁)
利用Python的列表推导式结合any()函数,一行搞定核心逻辑:
def filter_list_b(a, b): return [item for item in b if any(keyword in item for keyword in a)]
测试验证
用你的示例测试一下,完全符合预期:
# 示例1测试 a1 = ['apple', 'banana', 'orange'] b1 = ['TOR_apple_impact', 'TOR_apple_staging', 'TOR_banana_impact', 'TOR_banana_STAGING', 'TOR_orange_IMPACT', 'TOR_orange_STAGING'] print(filter_list_b(a1, b1)) # 输出:['TOR_apple_impact', 'TOR_apple_staging', 'TOR_banana_impact', 'TOR_banana_STAGING', 'TOR_orange_IMPACT', 'TOR_orange_STAGING'] # 示例2测试 a2 = ['apple', 'banana'] b2 = ['TOR_apple_impact', 'TOR_apple_staging', 'TOR_banana_impact', 'TOR_banana_STAGING', 'TOR_orange_IMPACT', 'TOR_orange_STAGING'] print(filter_list_b(a2, b2)) # 输出:['TOR_apple_impact', 'TOR_apple_staging', 'TOR_banana_impact', 'TOR_banana_STAGING']
内容的提问来源于stack exchange,提问作者kgui
相关产品推荐
相关产品推荐

