Подтвердить что ты не робот

Python - Как извлечь последние элементы x из списка

Если длина списка python больше заданного значения (скажем, 10), я хочу извлечь последние 10 элементов из этого списка в новый список. Как я могу это сделать? Я попытался получить разницу между len (my_list) - 10 и использовать его как: new_list = [(len (my_list) - 10):] который не работает

Любые предложения? Спасибо заранее

4b9b3361

Ответ 1

это так же просто, как:

my_list[-10:]

Ответ 2

Это показывает, как вырезать длинный список в максимальный размер и поместить остальные в новый список. Это не совсем то, о чем вы просите, но это может быть то, что вы действительно хотите:

>>> list1 = [10, 20, 30, 40, 50, 60, 70]
>>> max_size = 5
>>> list2 = list1[max_size:]
>>> list2
[60, 70]
>>> list1 = list1[:max_size]
>>> list1
[10, 20, 30, 40, 50]

Это больше похоже на то, о чем вы спрашиваете, в основном то же самое, но с новым списком:

>>> list1 = [10, 20, 30, 40, 50, 60, 70]
>>> list2 = list1[:max_size]
>>> list2
[10, 20, 30, 40, 50]
>>> list2 = list1[-max_size:]
>>> list2
[30, 40, 50, 60, 70]
>>> list1 = list1[:-max_size]
>>> list1
[10, 20]
>>> 

Ответ 3

В учебнике Python есть раздел, как использовать сортировку списков: http://docs.python.org/tutorial/introduction.html#lists

В вашем случае это так же просто, как писать:

 new_list = my_list[-10:]

Ответ 4

Собственно, индекс в заявлении вашего вопроса работает отлично - не могли бы вы вставить именно ту ошибку или неожиданный результат, который вы видите, когда пытаетесь сами ее использовать? Вот успешный запуск индекса, который вы предлагаете:

>>> my_list = list('abcdefghijklmnop')
>>> new_list = my_list[(len(my_list) - 10):]
>>> new_list
['g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p']

Является ли проблема просто тем, что вы забыли назвать my_list перед нотной записью?

Изменить: Как отмечает Феликс, вы должны помешать отрицательному индексу:

my_list[max(0, len(my_list) - 10):]

И, конечно, как отмечают другие ответы, постоянный отрицательный индекс на самом деле является самым простым способом достижения вашей цели; но я хотел сначала сосредоточиться на том, почему ваш "собственный способ" получить последние десять элементов, что имело смысл, даже если он не в полной мере использовал соглашения Python относительно срезов, вместо этого дал вам ошибку.