You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

获取符合特定包含规则的字符串对并转换为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

代码逻辑解释

  1. 生成初始配对:通过双重循环遍历列表,筛选出所有s1是s2子串且两字符串不同的组合。
  2. 筛选纯净s1:对每个字符串,检查它是否包含列表中其他任何字符串,不包含的即为"纯净"的s1,这类s1不会被进一步拆分,符合过滤要求。
  3. 过滤配对:只保留初始配对中s1属于纯净列表的项,排除那些s1本身包含其他列表元素的配对。
  4. 转为DataFrame:将最终配对转为带列名的DataFrame,方便后续处理。

内容的提问来源于stack exchange,提问作者Nanoputian

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 19:20:47