【发布时间】:2009-05-07 16:04:39
【问题描述】:
我需要确定文件中可能存在某些标记的位置。我开始认为我会使用 list.index 但我很快发现它返回第一个(并且只有第一个)项目。所以我决定实施我自己的解决方案,即
count=0
docIndex=[]
for line in open('myfile.txt','r'):
if 'mystring' in line:
docIndex.append(count)
count+=1
但这是 Python 对的。必须有一个更简单的解决方案,因为它是 Python。在这个网站和网络上搜寻我想出了一些更好的东西
newDocIndex=[]
for line in fileinput.input('myfile',inplace=1):
if 'mystring' in line:
newDocIndex.append(fileinput.lineno())
我知道这信息太多了,但自从我昨晚完成了评分期末考试后,我觉得很好——这是 Python,我们想在今年夏天取得一些进展——让我们试试列表理解
所以我这样做了:
[fileinput.lineno() for line in fileinput.input('myfile',inplace=1) if 'mystring' in line]
并得到一个空列表。所以我首先猜测问题是for中的项目必须是用于构建列表的项目。也就是说,如果我有 line 而不是 fileinput.lineno() 我会有一个非空列表,但这不是问题。
上述过程可以简化为列表推导吗?
使用答案但对其进行调整以提高可读性
listOfLines=[lineNumb for lineNumb,dataLine in enumerate(open('myfile')) if 'mystring' in dataLine]
【问题讨论】:
-
在“调整可读性”之前阅读python.org/dev/peps/pep-0008
-
虽然我浏览了参考资料,但我不明白你的意思。
-
SilentGhost 可能意味着典型的 python 约定建议在变量名中的单词之间使用下划线。例如:list_of_lines 和 line_numb 而不是 listOfLines 和 lineNumb。