
Шаг 1. Список
Баллов за прохождение: 1
Список
Список в Python - это упорядоченная2 коллекция элементов, которые могут быть разного типа данных1. Он представляет собой одну из наиболее мощных и универсальных структур данных в Python, позволяющую хранить, обрабатывать и манипулировать3 множеством значений в одной переменной.
Давайте представим список как коробку, в которой можно хранить множество вещей. Мы можем туда сложить книги, фрукты и вещи. Хранить можно всё. Здесь каждый предмет имеет свою позицию, будто полочку.
В Python, список - как коробка. Туда можно положить целые числа, строчки, другие списки, даже объекты4. Для того, чтобы достать нужный элемент нужно использовать индексацию.
cars = ['Mercedes', 'Tesla', 'BMW', 'Porshe']
print(cars)
print(cars[0])
print(cars[-1])
print(cars[1:-1])
Методы списка
Методы - это функции, которые вызываются с использованием точечной нотации, где указывается имя объекта, за которым следует точка и имя метода, например: object.method().
Методы - это функции, связанные с определенными объектами. Они представляют собой действия, которые можно выполнять над объектами определенного типа данных, в нашем случае со списком.
Основные методы списков:
1. append(): Этот метод добавляет элемент в конец списка.
my_list = [1, 2, 3]
my_list.append(4)
print(my_list) # Вывод: [1, 2, 3, 4]
2. extend(): Этот метод добавляет элементы другого списка в конец текущего.
my_list = [1, 2, 3]
another_list = [4, 5, 6]
my_list.extend(another_list)
print(my_list) # Вывод: [1, 2, 3, 4, 5, 6]
3. insert(): Этот метод вставляет элемент в указанную позицию списка.
my_list = [1, 2, 3]
my_list.insert(1, 5)
print(my_list) # Вывод: [1, 5, 2, 3]
4. remove(): Этот метод удаляет первое вхождение указанного элемента из списка.
my_list = [1, 2, 3, 4, 2]
my_list.remove(2)
print(my_list) # Вывод: [1, 3, 4, 2]
5. pop(): Этот метод удаляет элемент по указанному индексу и возвращает его значение.
my_list = [1, 2, 3]
popped_value = my_list.pop(1)
print(popped_value) # Вывод: 2
print(my_list) # Вывод: [1, 3]
6. index(): Этот метод возвращает индекс первого вхождения указанного элемента.
my_list = [1, 2, 3, 2]
index = my_list.index(2)
print(index) # Вывод: 1
7. count(): Этот метод возвращает количество вхождений указанного элемента в списке.
my_list = [1, 2, 3, 2]
count = my_list.count(2)
print(count) # Вывод: 2
8. sort(): Этот метод сортирует элементы списка в порядке возрастания (по-умолчанию) или по другому указанному критерию.
my_list = [3, 1, 4, 2]
my_list.sort()
print(my_list) # Вывод: [1, 2, 3, 4]
9. reverse(): Этот метод изменяет порядок элементов списка на обратный.
my_list = [1, 2, 3]
my_list.reverse()
print(my_list) # Вывод: [3, 2, 1]
10. clear(): Этот метод удаляет все элементы из списка.
my_list = [1, 2, 3]
my_list.clear()
print(my_list) # Вывод: []
Индексация
Индексация - это способ доступа к отдельным элементам списка по их позициям или индексам. Индексация начинается с 0, то есть первый элемент списка нулевой (имеет индекс 0), второй - 1 и так далее.
Положительная индексация
Используется для доступа к элементам списка начиная с начала. Первый элемент нулевой, второй - 1, и так далее.
my_list = ['a', 'b', 'c', 'd', 'e']
print(my_list[0]) # Вывод: 'a'
print(my_list[2]) # Вывод: 'c'
Отрицательная индексация
Позволяет обращаться к элементам списка, начиная с конца. Самый последний элемент имеет индекс -1, предпоследний - индекс -2, и так далее.
my_list = ['a', 'b', 'c', 'd', 'e']
print(my_list[-1]) # Вывод: 'e'
print(my_list[-3]) # Вывод: 'c'
Срезы (slicing)
Позволяют извлекать подсписок из списка, указывая начальный и конечный индексы.
my_list = ['a', 'b', 'c', 'd', 'e']
print(my_list[1:4]) # Вывод: ['b', 'c', 'd']
То есть от 1 элемента, до 4 не включительно.
Шаг среза (step)
При переборе и индексации можно указать шаг при создании среза:
my_list = ['a', 'b', 'c', 'd', 'e']
print(my_list[0:5:2]) # Вывод: ['a', 'c', 'e']
По умолчанию шаг 1, мы же указали шаг 2, а значит элементы выбираются через один. Логика: [start:stop:step].
Пропущенные индексы в срезах
Если начальный или конечный индекс в срезе не указан, Python будет использовать начало или конец списка соответственно.
my_list = ['a', 'b', 'c', 'd', 'e']
print(my_list[:3]) # Вывод: ['a', 'b', 'c']
print(my_list[2:]) # Вывод: ['c', 'd', 'e']
Изменение и присваивание элементов по индексу.
Существующие элементы можно изменять, присваивая им новые значения по их индексам.
my_list = ['a', 'b', 'c', 'd', 'e']
my_list[2] = 'z'
print(my_list) # Вывод: ['a', 'b', 'z', 'd', 'e']
Перебор через while
Конечно перебор списков через цикл while не так распространён, как с помощью for, однако это может быть полезным в некоторых случаях.
Например, простой перебор и вывод всех элементов списка с помощью цикла while:
my_list = [1, 2, 3, 4, 5]
index = 0
while index < len(my_list):
print(my_list[index])
index += 1
Заметки
1 - Отличие список от массивов в других языках программирования в том, что список может хранить разные элементы, не одного типа;
2 - Упорядоченная, значит что каждый элемент в списке имеет свои индексы;
3 - Списки, в отличии от кортежа, можно видоизменять с помощью различных методов объекта;
4 - Объекты, т.е экземпляры класса. Почти всё в Python является объектами. Это касается темы ООП, которую мы пройдем в будущем.