尝试从列表中删除元素时发生Python值错误

时间:2018-12-11 20:08:59

标签: python list valueerror

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

问题是您要从行数组中删除该行,然后尝试再次访问它。

例如,如果您的网站列表为

website_list = ["google","facebook"]

,您的x(行列表)为

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

看着这个循环

for site in websites_list:

由于您与Google匹配,因此您将从x中删除第二个句子。但是,您还可以尝试检查第二句话是否包含“ 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)]

优良作法是在遍历集合并沿途添加/删除元素时要非常小心。