JavaRush /Курсы /Модуль 1: Python Core /Получение подсписков

Получение подсписков

Модуль 1: Python Core
5 уровень , 2 лекция
Открыта

3.1 Диапазон индексов

Получение подсписка из списка — это распространённая задача, которая решается с помощью механизма срезов (slicing). Срезы позволяют извлекать элементы из списка, указывая начальный и конечный индексы диапазона, а также шаг, с которым нужно извлекать элементы.

Использование срезов

Срез списка можно получить, используя синтаксис list[start:stop:step], где:

  • start — начальный индекс элемента (включительно);
  • stop — конечный индекс элемента (не включительно);
  • step — шаг, с которым происходит выборка элементов.

Синтаксис срезов позволяет указывать начальный и конечный индексы списка, который вы хотите извлечь. Помним, что индексация в Python идет с нуля, то есть первый элемент имеет индекс 0, а третий — индекс 2.


my_list = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

# Получение подсписка с третьего по седьмой элемент 
sub_list = my_list[2:7]
print(sub_list)  # [2, 3, 4, 5, 6]
            
# Получение каждого второго элемента списка
step_list = my_list[0:10:2]
print(step_list)  # [0, 2, 4, 6, 8]

Если start не указан, по умолчанию он равен началу списка, а если stop не указан — концу списка. Если step не указан, по умолчанию он равен 1.

Примеры:


my_list = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

# С начала и до третьего элемента 
sub_list = my_list[:3]
print(sub_list)  # [0, 1, 2]
            
# С первого элемента/индекса и до конца
step_list = my_list[1:]
print(step_list)  # [1, 2, 3, 4, 5, 6, 7, 8, 9]

3.2 Отрицательные индексы

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

Отрицательные индексы в Python начинаются с -1, что соответствует последнему элементу списка. -2 будет указывать на предпоследний элемент и так далее. Использование отрицательных индексов упрощает доступ к элементам с конца списка без необходимости вычислять их позицию от начала.

Примеры использования

Допустим, у вас есть список:


my_list = ['a', 'b', 'c', 'd', 'e']

Чтобы получить последние три элемента, можно использовать срез с отрицательными индексами:


sub_list = my_list[-3:]
print(sub_list)  # Выведет ['c', 'd', 'e']

Если нужно получить подсписок между какими-то элементами, начиная с конца, можно сочетать отрицательные и положительные индексы:


sub_list = my_list[-4:3]
print(sub_list)  # Выведет ['b', 'c']

Можно даже развернуть список задом наперед

С помощью параметра step можно создавать более сложные срезы, например, для извлечения элементов в обратном порядке:


sub_list = my_list[::-1]
print(sub_list)  # Выведет ['e', 'd', 'c', 'b', 'a'] 

Преимущества использования отрицательных индексов:

  • Упрощение кода: Доступ к элементам с конца списка становится интуитивно понятным и не требует дополнительных вычислений.
  • Универсальность: Подход работает с любым списком, независимо от его размера.
  • Читаемость: Код становится проще для чтения и понимания, особенно когда требуется работать с последними элементами списка.

Отрицательные индексы — это мощный инструмент в арсенале Python-программиста, позволяющий эффективно и кратко управлять подсписками, улучшая читаемость и гибкость кода.

3.3 Есть ли элемент в списке?

Проверка наличия элемента в списке часто используется для управления потоком данных и логикой программ. В Python это можно сделать с помощью оператора in, который возвращает True, если элемент присутствует в списке, и False в противном случае.

Использование оператора in

Оператор in является простым и интуитивно понятным способом для проверки наличия элемента:


my_list = [1, 2, 3, 4, 5]
element = 3
exists = element in my_list
print(exists)  # Выведет True 

Применение в условных выражениях

Оператор in часто используется в условных операторах, например:


my_list = ["apple", "banana", "cherry"] 
element = "apple"
            
if element in my_list:
    print("Элемент находится в списке.")
else:
    print("Элемент не найден.")

Полезно! Поиск элемента с помощью in эффективен для небольших или средних списков. Однако для больших данных или частых операций поиска может быть более эффективным использовать другие структуры данных, такие как множества (set), которые предоставляют более быстрый поиск.

2
Задача
Модуль 1: Python Core, 5 уровень, 2 лекция
Недоступна
Срезы
Срезы
2
Задача
Модуль 1: Python Core, 5 уровень, 2 лекция
Недоступна
Поиск строки
Поиск строки
Комментарии (22)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Алексей Уровень 8
21 января 2026
почему то вот такое решение не принимает: import random my_list = list(random.randint(1, 10) for i in range(10)) element = input() print("в списке") if element in str(my_list) else print("не в списке") но если указать список из строковых значений то ок: my_list = ["apple", "banana", "cherry","apple", "banana", "cherry","apple", "banana", "cherry","banana"]
Дмитрий Бадаев Уровень 8
8 декабря 2025
Вторая задача просто супер! 10 элементов - любых элементов, не обязательно строк, почему выдает ошибку если я делаю числа? Окей, внес рандомное слово из 10 символов используя list(), тоже не работает) Конечно я сейчас сяду и буду писать 10 строк подряд, мне же нечего делать.
Евгений Уровень 17
9 декабря 2025
я через цикл числа закинул разу отформатировав в строки. все работает.
Maksym Уровень 22
11 октября 2025
самое простое решение 2 задачи: element = [apple", "banana", "orange", "grape", "mango", "cherry", "peach", "plum", "kiwi", "melon"] stroka =input("Введите строку:")) if stroka in element: print("Cтрока найдена в списке!") else: print("Строка не найдена в списке!")
Peter Уровень 6
31 августа 2025
НЕ понимаю чего все ноют, решение прошло с первой попытки
Ilya Shalaev Уровень 10
2 октября 2025
все просто хотят быть не такими как все ,и вместо того что бы сложить 2+2 и написать ответ 4 ,они начинает логарифмические тождества применять для этого )))
3 апреля 2025
Второе условие в задании про срезы составлено не верно, нас просят вывести элементы с 3-его (индекс = 2) по 7-й (индекс = 6) включительно (т.е. индекс будет 7) [6, 2, 2, 8, 10, 1, 9, 3, 6, 9] значит элементы с 3 по 7 будут равно [2, 8, 10, 1 ,9] индексы my_list[2:7] но при проверки появляется ошибка, заключается она в том что надо ввести срез my_list[2:8] т.е. с 3-его элемента до 7-ого индекса (включительно). Вы уж определитесь, что от нас хотите индексы или все же элементы списка.
Cheshir Уровень 9
18 мая 2025
У меня уже поправленные условия, все ок!
SWK Уровень 26
17 марта 2025
Про пример

my_list = ['a', 'b', 'c', 'd', 'e']
sub_list = my_list[::-1]
print(sub_list)  # Выведет ['e', 'd', 'c', 'b', 'a']
Как оно исхитряется разворачивать, если по умолчанию не указанное начало означает с начала, не указанный конец - до конца, шаг -1 - перебор в обратном порядке? "С первого элемента до последнего с шагом -1" - это будет только первый элемент, а дальше влево всё закончится.
Long_byte Уровень 55
9 июня 2025
как я понял если шаг 1 это по умолчанию, то начинаем с первого элемента по одному элементу списка если шаг -1 то он уходит циклический в конец списка и перебирает по одному с конца
vladrrom Уровень 8
14 марта 2025
Ужасный валидатор. Не проходит следующее решение:

mylist = [random.choices(string.ascii_lowercase) for _ in range(10)]
print("Да" if input() in mylist else "Нет")
STRIK Уровень 8
11 марта 2025
через пайчарм тоже не пишет что не так... и как я пойму что не так?))
shinobi Уровень 19
22 июля 2025
Можете воспользоваться нейронкой (гемини), но лучше своей головой, т.к. непонятно что вы там понаписали, всё подряд, ориентируйтесь на лекцию и примеры, пытайтесь составить код по примеру и если есть ошибка - разбирайте с нейронкой. Вы пишете: z = y in x Такое даже в голове представить нельзя, куда уж-там бедному старенькому валидатору джавараш
STRIK Уровень 8
24 ноября 2025
что именно не так? от того что я написал вместо англ. слов, буквы, для сокращения времени ничего не поменяется....
Дмитрий Бадаев Уровень 8
8 декабря 2025
ну скорее всего не проходило потому что валидатор просит вывод в стиле "строка найдена", а не просто True или False. Уже было такое с предыдущими задачами
STRIK Уровень 8
11 марта 2025
поменял цифры на буквы, после проверки пишет "Не выполнены все требования задачи", тем временем требования:🤣 П.С. спустя несколько обновлений сайта и попыток проверок, один и тот же код по итогу прошел проверку🤦‍♂️
STRIK Уровень 8
11 марта 2025
я не совсем понял пример: my_list = ['a', 'b', 'c', 'd', 'e'] sub_list = my_list[-4:3] print(sub_list) # Выведет ['b', 'c'] почему "б" и "ц" выводит... это ж начало списка с -4 с шагом 3... почему не "б" и "е"... между "б" и "с" шаг один же, а не 3... Понятно, что сейчас пойду гуглить, но в данном примере ниче не понятно... Без каких либо обьяснений, просто как в школе: Все понятно? (в ответ тишина) Ну и хорошо, идем дальше))
Елена Каликина Уровень 8
14 марта 2025
Тут указано начало списка и конец, а шаг не указан, значит по умолчанию он 1. Начинаем с -4, а это b, следующее c, так как до 3 индекса, не включая его