Могу ли я использовать списочное понимание для получения строковых индексов из файла? - PullRequest
0 голосов
/ 07 мая 2009

Мне нужно определить некоторые места в файле, где могут быть определенные маркеры. Я начал с мысли, что буду использовать 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 должен быть элементом, который используется для построения списка. То есть, если бы у меня была строка вместо fileinput.lineno(), у меня был бы непустой список, но это не проблема.

Можно ли свести описанный выше процесс к пониманию списка?

Используя ответ, но настраивая его для удобства чтения

listOfLines=[lineNumb for lineNumb,dataLine in enumerate(open('myfile')) if 'mystring' in dataLine]

1 Ответ

8 голосов
/ 07 мая 2009

Как насчет этого?

[index for index,line in enumerate(open('myfile.txt')) if 'mystring' in line]
...