Python 尝试从列表中删除元素时出现值错误

Python Value Error when attempting to remove an element from a list

该程序假设获取一个文本文件并将其内容转换为一个列表,其中每个元素都是原始文本文件中的一行。从那里我希望能够查看另一个列表中的某些网站是否包含在一个元素中,如果是,则从列表中删除该元素。我不断收到 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

问题是您正在从线阵列中删除该线,然后尝试再次访问它。

例如,如果您有

的网站列表
website_list = ["google","facebook"]

你的 x(行列表)是

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

看这个循环

for site in websites_list:

你会从 x 中删除第二个句子,因为你匹配 google。但是,您还可以尝试检查第二个句子是否包含 "facebook"。因为您已经从 x 列表中删除了第二个句子,所以您会得到一个错误。

我会建议逐行阅读文件,而不是一次抓取所有行。如果是没有网站名称的行,则将其添加到有效列表集合中。

另一种解决这个问题的 pythonic 方法是使用列表理解 如果你的输入不大

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)]

在沿途遍历集合和 adding/deleting 个元素时要非常小心是一种很好的做法。