我可以使用列表理解从文件中获取行索引吗?

PyN*_*bie 0 python list-comprehension

我需要在文件中标识某些标记可​​能存在的位置.我开始认为我会使用list.index但我很快发现它返回第一个(也是唯一的)项目.所以我决定实施我自己的解决方案

count=0
docIndex=[]
for line in open('myfile.txt','r'):
    if 'mystring' in line:
        docIndex.append(count)
    count+=1
Run Code Online (Sandbox Code Playgroud)

但这是Python的权利.必须有一个更简单的解决方案,因为它是Python.在这个网站和网络上狩猎我想出了一些更好的东西

newDocIndex=[]
for line in fileinput.input('myfile',inplace=1):
    if 'mystring' in line:
    newDocIndex.append(fileinput.lineno())
Run Code Online (Sandbox Code Playgroud)

我知道这是太多的信息但是因为我昨晚完成了总决赛的评分,我认为这是Python,我们想在今年夏天取得一些进展 - 让我们尝试一下列表理解

所以我这样做了:

[fileinput.lineno() for line in fileinput.input('myfile',inplace=1) if 'mystring' in line]
Run Code Online (Sandbox Code Playgroud)

得到一个空列表.所以我首先猜到问题是for中的项必须是用于构建列表的项.那就是如果我有线而不是fileinput.lineno()我会有一个非空列表,但这不是问题.

上述过程可以简化为列表理解吗?

使用答案,但调整它的可读性

listOfLines=[lineNumb for lineNumb,dataLine in enumerate(open('myfile')) if 'mystring' in dataLine]
Run Code Online (Sandbox Code Playgroud)

syk*_*ora 8

那这个呢?

[index for index,line in enumerate(open('myfile.txt')) if 'mystring' in line]
Run Code Online (Sandbox Code Playgroud)

  • 这个解决方案就是我不特别关心列表推导的原因.他们是不可理解的.我说的是舌头,但实际上,为什么这被认为比更直接的东西"更好"? (2认同)