我有一些这样的清单:
lines = [
"line",
"subline2",
"subline4",
"line",
]
我想获取以某些子字符串开头的行索引列表。
我使用这种方法:
starts = [n for n, l in enumerate(lines) if l.startswith('sub')]
但也许有人知道更漂亮的方法?
我有一些这样的清单:
lines = [
"line",
"subline2",
"subline4",
"line",
]
我想获取以某些子字符串开头的行索引列表。
我使用这种方法:
starts = [n for n, l in enumerate(lines) if l.startswith('sub')]
但也许有人知道更漂亮的方法?
我知道这个问题已经有一段时间了,但无论如何,如果有人感兴趣,这里还有另一个解决方案。
你的方式看起来不错,但这里有一个类似的策略,使用list.index()
方法:
starts = [lines.index(l) for l in lines if l.startswith('sub')]
就时间而言,这两个函数的时钟大致相同(1.7145156860351563e-06
您的enumerate
解决方案平均秒数1.7133951187133788e-06
,我的.index()
解决方案平均秒数)
虽然我喜欢您的方法,但这是另一种lines
正确处理相同条目的方法(即类似于您的示例代码的方式),并且具有可比的性能,对于长度lines
增长的情况也是如此:
starts = [i for i in range(len(lines)) if lines[i].startswith('sub')]