python course for me
November 5, 2023

Stepik: Срезы списков. Операторы сравнения списков

Срезы списков

Срезы позволяют выделять наборы элементов. Синтаксис list[start:stop]. start включается в срез, а stop нет. Поэтому stop должен быть на 1 больше
На выходе получается новый список, который содержит выбранные элементы

lst = ['Москва', 'Уфа', 'Тверь', 'Казань']

print(lst[1:3])
# Вывод: ['Уфа', 'Тверь']

print(lst[2:])
# Вывод: ['Тверь', 'Казань']

print(lst[:3])
# Вывод: ['Москва', 'Уфа', 'Тверь']

Чтобы получить копию списка, нужно не указывать start и stop

lst = ['Москва', 'Уфа', 'Тверь', 'Казань']

cities = lst[:]
print(cities)
# Вывод: ['Москва', 'Уфа', 'Тверь', 'Казань']

print(id(lst), id(cities))
# Вывод: 2314485636992 2314484136704

Копию можно еще сделать таким способом:

lst = ['Москва', 'Уфа', 'Тверь', 'Казань']

c = list(lst)
print(c)
# Вывод: ['Москва', 'Уфа', 'Тверь', 'Казань']

print(id(lst), id(c))
# Вывод: 1807290016448 1807290019520

Так же можно брать срезы так:

marks = [2, 3, 4, 3, 5, 2]

srez = marks[2:-1]
print(srez)
# Вывод: [4, 3, 5]

srez1 = marks[-3:-1]
print(srez1)
# Вывод: [3, 5]

Можно брать срез списка с определённым шагом. Синтаксис list[start:stop:step]

marks = [2, 3, 4, 3, 5, 2]

print(marks[1:5:2])
# Вывод: [3, 3]

print(marks[:5:2])
# Вывод: [2, 4, 5]

print(marks[1::2])
# Вывод: [3, 3, 2]

print(marks[::2])
# Вывод: [2, 4, 5]

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

marks = [2, 3, 4, 3, 5, 2]

print(marks[::-1]) # реверс списка
# Вывод: [2, 5, 3, 4, 3, 2]

print(marks[::-2])
# Вывод: [2, 3, 3]

Учитывая, что списки относятся к изменяемым типам данных, то со срезами можно выполнять изменение группы элементов.
Например, для списка marks мы заменим [4, 3] (index 2 и 3) на хорошо и удовлетворительно

marks = [2, 3, 4, 3, 5, 2]

marks[2:4] = ['хорошо', 'удовлетворительно']
print(marks)
# Вывод: [2, 3, 'хорошо', 'удовлетворительно', 5, 2]

marks[::2] = [0, 0, 0]
print(marks)
# Вывод: [0, 3, 0, 'удовлетворительно', 0, 2]

Можно заменять значения через срез таким способом:

marks = [2, 3, 4, 3, 5, 2]
marks[2:4] = 10, 20
print(marks)
# Вывод: [2, 3, 10, 20, 5, 2]

Сравнение списков между собой с помощью операторов > < == !=

print([1, 2, 3] == [1, 2, 3])
# Вывод: True

print([1, 2, 3] != [1, 2, 3])
# Вывод: False

print([10, 2, 3] > [1, 2, 3])
# Вывод: True

print([1, 2, 'abc'] > [1, 2, 'abc'])
# Вывод: False

ТЕКСТ ЛЕКЦИИ