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

Python模式查找函数开发:找出数字列表中出现最多的重复子串

实现GetPattern函数:找出数字列表中多数元素共有的最长子串

需求很明确:给定一个数字列表,写一个GetPattern函数,返回在大多数数字里重复出现的最长数字子串。比如示例里的[1234, 9912349, 578],1234出现在前两个数字中(超过列表长度的一半),所以返回它。

实现思路

  1. 转字符串处理:把所有数字转换成字符串,方便截取和匹配子串。
  2. 定义多数阈值:“大多数”按超过列表长度一半来算,比如列表长度为3时,阈值是2;长度为4时,阈值是3。
  3. 统计子串出现次数:遍历每个数字字符串,生成所有可能的子串,统计每个子串在多少个不同的数字里出现(同一个数字里重复出现的子串只算一次)。
  4. 筛选最优子串:从符合次数要求的子串里,挑最长的;长度相同的话,优先选出现次数多的。

代码实现

def GetPattern(num_list):
    # 将数字列表转为字符串列表
    str_list = [str(num) for num in num_list]
    n = len(str_list)
    if n == 0:
        return ""
    
    # 计算多数阈值:超过列表长度的一半
    threshold = (n // 2) + 1
    
    # 存储子串及其覆盖的数字数量
    substring_count = {}
    
    for s in str_list:
        # 记录当前数字中已统计过的子串,避免重复计数
        seen = set()
        str_len = len(s)
        # 生成所有可能的非空子串
        for start in range(str_len):
            for end in range(start + 1, str_len + 1):
                substr = s[start:end]
                if substr not in seen:
                    seen.add(substr)
                    substring_count[substr] = substring_count.get(substr, 0) + 1
    
    # 筛选出符合阈值的子串
    valid_substrings = [sub for sub, cnt in substring_count.items() if cnt >= threshold]
    if not valid_substrings:
        return ""
    
    # 按长度降序、出现次数降序排序,取第一个
    valid_substrings.sort(key=lambda x: (-len(x), substring_count[x]))
    return valid_substrings[0]

# 示例测试
ListOfNumbers = [1234, 9912349, 578]
print(GetPattern(ListOfNumbers))  # 输出:1234

关键细节说明

  • 同一个数字里的重复子串只算一次:比如数字是123123,子串123出现两次,但统计时只算该数字包含这个子串一次。
  • 边界处理:空列表直接返回空字符串;没有符合条件的子串也返回空。
  • 排序逻辑:优先选最长的子串,长度相同则选覆盖数字更多的,确保结果符合需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 16:50:25