Удалите n последних элементов из списка. Я получаю сообщение об ошибке: «ValueError: list.remove (x): x отсутствует в списке» - PullRequest
0 голосов
/ 14 мая 2019

У меня есть ошибка в этом коде, и я не понимаю, почему это неправильно.

LL = [2,3,4,5,6,2,5,4]
print(x[-4:])
def remove_last_elements(the_list):
    while len(the_list) > 5 in the_list:
       the_list.remove(the_list[-4:])
    print(the_list)
remove_last_elements(LL)

Вывод должен быть LL = [2,3,4,5].Мне нужно, чтобы len ()> 5, потому что у меня есть несколько списков (вложенных) с различным количеством элементов.

Вот сообщение об ошибке, которое я получил:

Traceback (most recent call last):
  File "C:/APPL/DPI/PDF_reader/test_general.py", line 68, in <module>
    remove_last_elements(LL)
  File "C:/APPL/DPI/PDF_reader/test_general.py", line 66, in remove_last_elements
    the_list.remove(the_list[-4:])
ValueError: list.remove(x): x not in list

Ответы [ 2 ]

0 голосов
/ 14 мая 2019

Вам не нужно проверять какие-либо условия. Просто попытайтесь взять первые пять элементов:

the_list = the_list[:5]

Если в списке менее пяти элементов, оператор нарезки будет игнорироваться.

0 голосов
/ 14 мая 2019

Да, вы должны использовать простое сравнение для этого. Если в списке более 5 элементов, отбросьте последние 5. Представьте себе, что все , но , сохраните все 5.

if len(the_list) > 5:
    the_list = the_list[:-4]

Если вы хотите уменьшить список до тех пор, пока у вас будет не более 5 элементов, замените if на while.


обновление за разъяснение ОП

Ваша задача состоит в том, чтобы удалять группы из 5 элементов, пока их не станет больше 5. Это достаточно просто с оператором модуля.

final_size = len(the_list) % 5
if final_size = 0:
    final_size = 5

the_list = the_list[:final_size]

Ваш исходный код имеет несколько структурных проблем. Если вас беспокоит количество элементов в списке, почему вы проверяете наличие определенного элемента? 5 in the_list ищет значение 5, а не 5 элементов.

Во-вторых, ваш список состоит из целых чисел, но вы пытаетесь удалить самореферентный подсписок:

the_list.remove(the_list[-4:])

Как вы уже знаете, этот фрагмент представляет собой определенный список из пяти элементов. У вас нет подсписка в the_list, поэтому вы не найдете его как элемент. Если вы хотите специально удалить каждый из элементов из исходного списка, вам придется поочередно проходить по ним. Гораздо проще просто взять фрагмент списка, который вы хотите сохранить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...