获取符合特定包含规则的字符串对并转换为DataFrame
字符串配对提取与过滤方案
需求说明
给定字符串列表,需提取满足以下条件的字符串对并转为DataFrame:
- 第一个字符串是第二个字符串的子串,且两字符串不相等
- 过滤掉**第一个字符串包含列表中其他字符串(自身除外)**的配对
示例输入列表:
names = ['dog', 'big dog', 'big brown dog', 'cat', 'small cat', 'small white cat']
注:配对('big dog', 'big brown dog')会被过滤,因为dog是big dog的子串且dog在列表中。
实现代码
import pandas as pd def get_valid_pairs(str_list): # 生成所有s1是s2子串且s1≠s2的初始配对 initial_pairs = [(s1, s2) for s1 in str_list for s2 in str_list if s1 != s2 and s1 in s2] # 找出"纯净"的s1:s1不包含列表中其他任何字符串 pure_s1 = [] for s in str_list: # 检查s是否包含列表中除自身外的其他字符串 has_sub = any(other in s for other in str_list if other != s) if not has_sub: pure_s1.append(s) # 过滤初始配对,只保留s1属于纯净列表的项 valid_pairs = [pair for pair in initial_pairs if pair[0] in pure_s1] # 转为DataFrame return pd.DataFrame(valid_pairs, columns=['子串', '父串']) # 测试示例 names = ['dog', 'big dog', 'big brown dog', 'cat', 'small cat', 'small white cat'] result_df = get_valid_pairs(names) print(result_df)
输出结果
运行上述代码后,输出的DataFrame内容如下:
子串 父串 0 dog big dog 1 dog big brown dog 2 cat small cat 3 cat small white cat
代码逻辑解释
- 生成初始配对:通过双重循环遍历列表,筛选出所有s1是s2子串且两字符串不同的组合。
- 筛选纯净s1:对每个字符串,检查它是否包含列表中其他任何字符串,不包含的即为"纯净"的s1,这类s1不会被进一步拆分,符合过滤要求。
- 过滤配对:只保留初始配对中s1属于纯净列表的项,排除那些s1本身包含其他列表元素的配对。
- 转为DataFrame:将最终配对转为带列名的DataFrame,方便后续处理。
内容的提问来源于stack exchange,提问作者Nanoputian
相关产品推荐
相关产品推荐

