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

请求解析Python中实现公共前缀的enumerate代码执行流程

字符串列表公共前缀代码执行流程详解

先看原代码:

strings = ["apple", "app", "ape"]

common = next((i for i,(p,*r) in enumerate(zip(*strings)) 
                                 if any(p!=c for c in r)),0)

print(strings[0][:common]) # ap

下面一步步拆解执行逻辑:

1. zip(*strings):按位置聚合字符

*strings是把列表里的三个字符串解包成zip的独立参数,相当于zip("apple", "app", "ape")。
zip会逐个位置取所有字符串的对应字符,直到最短的字符串耗尽:

  • 第0位:('a', 'a', 'a')(三个字符串的第一个字符)
  • 第1位:('p', 'p', 'p')(三个字符串的第二个字符)
  • 第2位:('p', 'p', 'e')(三个字符串的第三个字符,此时"app"和"ape"已无更多字符,zip停止)

2. enumerate(zip(*strings)):给字符组加索引

enumerate会给zip生成的每个字符元组添加上对应的位置索引,得到:

  • (0, ('a', 'a', 'a'))
  • (1, ('p', 'p', 'p'))
  • (2, ('p', 'p', 'e'))

3. i,(p,*r):解包索引和字符组

这一步是对enumerate的每个输出做解构:

  • i:拿到当前的位置索引(0、1、2)
  • (p,*r):把字符元组拆成第一个字符p,剩下的字符打包成列表r:
    • 索引0:p='a',r=['a','a']
    • 索引1:p='p',r=['p','p']
    • 索引2:p='p',r=['p','e']

4. 生成器表达式+any():找第一个不匹配的位置

生成器会遍历每个索引和字符组,判断条件any(p!=c for c in r):

  • 这个条件是检查当前位置的字符是否在所有字符串中都一致:只要r里有一个字符和p不一样,any()就返回True
  • 索引0:所有字符都是'a',any()返回False,跳过
  • 索引1:所有字符都是'p',any()返回False,跳过
  • 索引2:r里有'e'和p不一样,any()返回True,此时把索引2传入生成器

5. next():获取第一个不匹配的索引

next()会取生成器的第一个结果(也就是2),如果所有位置的字符都完全一致(比如所有字符串相同),生成器没有输出,就会用默认值0。

6. 截取公共前缀

strings[0][:common]取第一个字符串的前common个字符,也就是前2位,得到ap。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 23:15:55