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