如何修复Python中的“ ValueError:list.remove(x):x不在列表中”错误

时间:2019-05-16 07:55:09

标签: python

我正在尝试从列表“标记”中删除“ 76的数学”,但它不断抛出:

line 2, in <module>
    Marks.remove("Maths, 76")
ValueError: list.remove(x): x not in list

我试图更改代码以将Maths作为一个单独的实体,但是它没有用。

Marks = ['Amy', 'Jones', 'English', 72, 'Maths', 76, 'Computer Science', 96]
Marks.remove("Maths, 76")
print(Marks)

我相信输出应该只是不带变量的列表,而只是输出完整列表。

4 个答案:

答案 0 :(得分:3)

list.remove仅接受一个参数,这是您要删除的项目。

从文档中:https://docs.python.org/3/tutorial/datastructures.html

  

list.remove(x)
  从列表中删除值等于x的第一项。如果没有此类项目,则会引发ValueError。

但是"Maths, 76"不是列表中的元素,因此会出现错误ValueError: list.remove(x): x not in list
因此,您希望一次删除一个元素

Marks = ['Amy', 'Jones', 'English', 72, 'Maths', 76, 'Computer Science', 96]
Marks.remove("Maths")
Marks.remove(76)
print(Marks)

或使用for循环

Marks = ['Amy', 'Jones', 'English', 72, 'Maths', 76, 'Computer Science', 96]

for item in ["Maths", 76]:
    Marks.remove(item)

print(Marks)

输出将为

['Amy', 'Jones', 'English', 72, 'Computer Science', 96]

答案 1 :(得分:2)

您正试图删除列表中不存在的字符串"Maths, 76"

您要么做:

Marks.remove("Maths")
Marks.remove(76)

您可以这样更改列表:

Marks = ['Amy', 'Jones', 'English', 72, "Maths, 76", 'Computer Science', 96]
  

注意:据我所知,您确实应该考虑使用使用dictionnaries而不是列表

示例:

marks = {'first_name': 'Amy', 'name': 'Jones', 'English': 72, 'Maths': 76, 'Computer Science': 96}
del marks['Maths'] # to remove the Maths entry

答案 2 :(得分:1)

给予

Marks = ['Amy', 'Jones', 'English', 72, 'Maths', 76, 'Computer Science', 96]
Marks.remove("Maths, 76")

您将收到此错误,因为列表中没有确切的字符串“ Maths,76”。

字符串“ Maths”在列表中,数字76也在列表中,因此可以将它们分别删除:

Marks.remove("Maths")
Marks.remove(76)

您可以将条目(假设名字和名字)配对成这样的元组:

>>> list(zip(Marks[0::2], Marks[1::2]))
[('Amy', 'Jones'), ('English', 72), ('Maths', 76), ('Computer Science', 96)]

然后您可以删除('Maths', 76)

或者您可以从列表中理解字典:

>>> {k:v for k,v in zip(Marks[0::2], Marks[1::2])}
{'Amy': 'Jones', 'English': 72, 'Maths': 76, 'Computer Science': 96}

>>> lookup = {k:v for k,v in zip(Marks[0::2], Marks[1::2])}
>>> lookup['Maths']
76

要删除项目,请使用pop

>>> lookup.pop('Maths')
76
>>> lookup
{'Amy': 'Jones', 'English': 72, 'Computer Science': 96}

答案 3 :(得分:0)

当列表中不存在该元素时,您会遇到此错误。我认为最好的方法是在列表理解中使用 if/else。

例如:

Marks = ['Amy', 'Jones', 'English', 72, 'Maths', 76, 'Computer Science', 96]
Remove_result = [i for i in Marks if i != "Maths, 76"]
Remove_result
out[1].  ['Amy', 'Jones', 'English', 72, 'Maths', 76, 'Computer Science', 96]

Remove_resultMarks 没有区别,因为 "Maths, 76" 不存在于 Marks

注意:您不能使用 [Marks.remove(i) for i in Marks if i == "Maths, 76"],因为它返回 []。非迭代次数满足if条件的原因。