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

如何将最长公共前缀算法中的for循环转换为pandas的.apply方法?

用Pandas .apply实现最长公共前缀

先看改造后的代码,基于你的需求用apply替代嵌套循环:

import pandas as pd

def longest_common_prefix_with_apply(strs: list[str]) -> str:
    if not strs:
        return ""
    
    # 转为Series方便批量处理每个字符串
    str_series = pd.Series(strs)
    # 找到最短字符串的长度,避免索引越界
    min_len = str_series.str.len().min()
    if min_len == 0:
        return ""
    
    # 以第一个字符串为基准,遍历每个字符位置
    for i in range(min_len):
        target_char = strs[0][i]
        # 用apply检查所有字符串在i位置的字符是否和基准字符一致
        all_match = str_series.apply(lambda s: s[i] == target_char).all()
        if not all_match:
            return strs[0][:i]
    
    # 所有位置都匹配,返回基准字符串的前min_len个字符
    return strs[0][:min_len]

# 测试
strs = ['flower','flow','flight']
print(longest_common_prefix_with_apply(strs))  # 输出 'fl'

代码说明

  • 先处理边界情况:空列表或包含空字符串时直接返回空
  • 将字符串列表转为pd.Series,借助Pandas的批量处理能力简化逻辑
  • 用str_series.str.len().min()获取最短字符串长度,避免后续索引超出字符串长度报错
  • 对每个字符位置i,用apply生成布尔序列,再通过.all()判断是否所有字符串在该位置的字符都和基准字符匹配
  • 一旦发现不匹配的位置,立即返回基准字符串的前i个字符;若所有位置都匹配,返回基准字符串的前min_len个字符

和原代码的对比

原代码通过嵌套循环逐个检查每个字符串的字符,改造后的代码用apply替代了内层循环,将单字符串的检查逻辑封装到lambda函数中,用Pandas的批量操作实现了相同的业务逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 00:15:44