如何找到以某个子串开头的字符串在列表中的索引?

14 投票
2 回答
13632 浏览
提问于 2025-04-17 16:45

我有一个这样的列表:

lines = [
    "line",
    "subline2",
    "subline4",
    "line",
]

我想要找出那些以某个特定字符串开头的行的索引。

我用这个方法:

starts = [n for n, l in enumerate(lines) if l.startswith('sub')]

不过,也许有人知道更好的方法?

2 个回答

3

虽然我喜欢你的方法,但这里有另一种方法可以正确处理lines中相同的条目(也就是说,和你的示例代码处理的方式类似),而且在lines长度增加的情况下,它的性能也差不多:

starts = [i for i in range(len(lines)) if lines[i].startswith('sub')]
8

我知道这个问题已经有一段时间没被讨论了,但我还是想分享一个新的解决方案,看看有没有人感兴趣。

你的方法看起来不错,不过我这里有一个类似的策略,使用了 list.index() 方法:

starts = [lines.index(l) for l in lines if l.startswith('sub')]

从时间上看,这两个函数的执行时间差不多(你的 enumerate 方法平均大约需要 1.7145156860351563e-06 秒,而我用 .index() 的方法平均需要 1.7133951187133788e-06 秒)

撰写回答