我正在尝试从列表“标记”中删除“ 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)
我相信输出应该只是不带变量的列表,而只是输出完整列表。
答案 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_result
与 Marks
没有区别,因为 "Maths, 76"
不存在于 Marks
注意:您不能使用 [Marks.remove(i) for i in Marks if i == "Maths, 76"]
,因为它返回 []
。非迭代次数满足if
条件的原因。