Ошибка значения: список.удалить(x): x нет в списке, но ясно, что список содержит его

#python

Вопрос:

Почему я получаю ошибку ValueError: list.remove(x): x not in list в приведенном ниже коде? 85 явно есть в списке зачетных книжек.

 grades = [98, 97, 85, 88]
gradebook = [["physics", 98], ["calculus", 97], ["poetry", 85], ["history", 88]]
gradebook.remove(85)
 

Комментарии:

1. grades содержит 85. gradebook не содержит.

2. Возможно, вы захотите gradebook = [k for k in gradebook if k[1] != 85] .

3. «85 явно в списке зачетных книжек» — нет, это явно не так. С другой стороны, ["poetry", 85] он явно находится в этом списке…

Ответ №1:

gradebook.remove(85) удалил бы элемент, значение которого равно 85. зачетная книжка содержит вложенные списки, а не целые числа. Вы имели в виду:

 grades.remove(85)
 

или

 gradebook = [ [subject,grade] for subject, grade in gradebook if grade != 85 ]
 

Ответ №2:

Это будет модификация , которую вы должны внести в зачетную книжку[nested_list_location].удалите(your_int_value), так как вы работаете с вложенными списками.

 gradebook = [["physics", 98], ["calculus", 97], ["poetry", 85], ["history", 88]]
gradebook[-1].remove(88)
# will result in [['physics', 98], ['calculus', 97], ['poetry', 85], ['history']]
 

Ответ №3:

Попробуйте это вместо этого:

 gradebook.remove(["poetry", 85])
 

При попытке удалить элемент вам необходимо указать list[Union[str, int]] , потому что каждый из элементов в вашем списке ( gradebook ) имеет тип list[Union[str, int]]