12

我有一些这样的清单:

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

我想获取以某些子字符串开头的行索引列表。

我使用这种方法:

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

但也许有人知道更漂亮的方法?

4

2 回答 2

7

我知道这个问题已经有一段时间了,但无论如何,如果有人感兴趣,这里还有另一个解决方案。

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

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

就时间而言,这两个函数的时钟大致相同(1.7145156860351563e-06您的enumerate解决方案平均秒数1.7133951187133788e-06,我的.index()解决方案平均秒数)

于 2018-02-15T21:21:36.213 回答
3

虽然我喜欢您的方法,但这是另一种lines正确处理相同条目的方法(即类似于您的示例代码的方式),并且具有可比的性能,对于长度lines增长的情况也是如此:

starts = [i for i in range(len(lines)) if lines[i].startswith('sub')]
于 2021-05-04T23:21:39.870 回答