Получение индекса за пределами допустимой ошибки при использовании pop в python

Я пытаюсь прочитать текстовый файл и удалить из него все слова остановки. Тем не менее, я получаю ошибку индекса вне диапазона при использовании b[i].pop(j) . Но если я использую print(b[i][j]) , я не получаю никакой ошибки и не получаю слова как выходные данные. Может ли кто-нибудь обнаружить ошибку?

 import nltk from nltk.corpus import stopwords stop = stopwords.words('english') fo = open("text.txt", "r") # text.txt is just a text document list = fo.read(); list = list.replace("\n","") # removing newline character b = list.split('.',list.count('.')) # splitting list into lines for i in range (len(b) - 1) : b[i] = b[i].split() # splitting each line into words for i in range (0,len(b)) : for j in range (0,len(b[i])) : if b[i][j] in stop : b[i].pop(j) # print(b[i][j]) #print(b) # Close opend file fo.close() 

Вывод:

 Traceback (most recent call last): File "prog.py", line 29, in <module> if b[i][j] in stop : IndexError: list index out of range 

Вывод на комментарий b[i].pop(j) и un- b[i].pop(j) print(b[i][j]) :

 is that the from the the the can the and and the is and can be into is a or 

Вы удаляете элементы из списка, когда вы выполняете итерацию по ним, это приводит к уменьшению размера списка во время итерации, но итерация по-прежнему будет продолжаться для длины исходного списка, что вызовет такие проблемы InderError .

Вместо этого вы должны попытаться создать новый список, включая только те элементы, которые вы хотите. Пример –

 result = [] for i in range (0,len(b)): templist = [] for j in range (0,len(b[i])): if b[i][j] not in stop : templist.append(b[i][j]) result.append(templist) 

То же самое можно сделать в понимании списка –

 result = [[word for word in sentence if word not in stop] for sentence in b]