如何将最长公共前缀算法中的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
相关产品推荐
相关产品推荐

