Ошибка значения Python при попытке удалить элемент из списка - PullRequest
0 голосов
/ 11 декабря 2018

Предполагается, что эта программа берет текстовый файл и преобразует его содержимое в список, где каждый элемент представляет собой строку из исходного текстового файла.оттуда я хочу видеть, содержатся ли определенные веб-сайты в другом списке в элементе, если это так, удалить этот элемент из списка.Я продолжаю получать ValueError

with open(hosts_temp, 'r+') as file1:
     content = file1.read() 
     x = content.splitlines() #convert contents of file1 in to a list of strings.

     for element in x:
         for site in websites_list:
             if site in element:
                 x.remove(element)      
             else:
                 pass

Вот ошибка, которую я получаю:

ValueError: list.remove(x): x not in list

1 Ответ

0 голосов
/ 11 декабря 2018

Проблема в том, что вы удаляете строку из массива строк, а затем пытаетесь получить к ней доступ снова.

Например, если у вас есть список веб-сайтов

website_list = ["google","facebook"]

и ваш x(список строк):

["First sentence","Second sentence containing google","Last sentence"]

Глядя на этот цикл

for site in websites_list:

Вы удалили бы второе предложение из x, потому что вы соответствовали Google.Однако вы также попытаетесь проверить, содержит ли второе предложение «facebook».Поскольку вы уже удалили второе предложение из своего списка x, вы получите сообщение об ошибке.

Я бы рекомендовал читать файл построчно вместо того, чтобы перехватывать вселинии сразу.Если это строка без имени веб-сайта, добавьте ее в допустимую коллекцию списков.

Еще один питонический способ решения этой проблемы - использование списка со списком, если ваш ввод не большой

with open(hosts_temp, 'r+') as file1:
 content = file1.read() 
 x = content.splitlines()
 x = [line for line in x if all(w not in line for w in websites_list)]

Рекомендуется быть очень осторожным при переборе коллекции и добавлении / удалении элементов по пути.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...