我有一些这样的清单:
lines = [
"line",
"subline2",
"subline4",
"line",
]
我想获取以某些子字符串开头的行索引列表。
我使用这种方法:
starts = [n for n, l in enumerate(lines) if l.startswith('sub')]
但也许有人知道更美妙的方法吗?
答案 0 :(得分:2)
我知道已经有一段时间了,因为这个问题很活跃,但是如果有人感兴趣的话,这是另一个解决方案。
您的方式似乎很好,但这是一个类似的策略,使用list.index()
方法:
starts = [lines.index(l) for l in lines if l.startswith('sub')]
就时间而言,这两个函数的时间大致相同(1.7145156860351563e-06
解决方案平均enumerate
秒,1.7133951187133788e-06
解决方案.index()
秒)
答案 1 :(得分:2)
虽然我喜欢您的方法,但这里有另一种方法可以正确处理 lines
中的相同条目(即类似于您的示例代码的方式),并且具有相当的性能,同样适用于 lines
的长度{1}} 增长:
starts = [i for i in range(len(lines)) if lines[i].startswith('sub')]