Урок 001: списки и последовательности¶
Цель¶
Хранить несколько однотипных значений в одном объекте, обходить их циклом и безопасно добавлять, заменять и удалять элементы.
Создание списка¶
Список записывается в квадратных скобках:
Ожидаемый вывод:
Индексация начинается с нуля. Для списка из трёх элементов допустимы индексы 0, 1, 2. Обращение к articles[3] вызывает IndexError.
Последний элемент можно получить как articles[-1]. Это удобно, но в пустом списке такой доступ тоже вызывает ошибку.
Изменение состава¶
articles = []
articles.append("LO100")
articles.append("LO200")
articles[1] = "LO250"
print(articles)
append добавляет один элемент в конец. Присваивание по существующему индексу заменяет значение, но не увеличивает длину.
Удаление по значению и по индексу:
articles = ["LO100", "LO200", "LO300"]
articles.remove("LO200")
removed_article = articles.pop(0)
print(removed_article)
print(articles)
remove вызывает ValueError, если значения нет. Перед удалением можно проверить принадлежность:
Обход списка¶
Если нужен порядковый номер для пользователя, примените enumerate:
articles = ["LO100", "LO200", "LO300"]
for number, article in enumerate(articles, start=1):
print(f"{number}. {article}")
Номер для человека начинается с 1, но индекс внутри списка по-прежнему начинается с 0.
Срезы¶
Срез создаёт новый список из выбранного диапазона:
articles = ["A", "B", "C", "D"]
first_two = articles[:2]
middle = articles[1:3]
print(first_two)
print(middle)
Правая граница не включается. articles[1:3] содержит элементы с индексами 1 и 2.
Псевдоним и копия¶
original = ["LO100", "LO200"]
alias = original
copy_of_original = original.copy()
alias.append("LO300")
print(original)
print(copy_of_original)
alias и original указывают на один список, поэтому изменение видно через оба имени. copy() создаёт отдельный внешний список. Позже важно помнить: вложенные изменяемые объекты при такой копии всё ещё могут быть общими.
Нельзя менять состав во время обхода¶
Удаление элементов из того же списка внутри for способно пропустить значения. Безопаснее собрать новый список:
quantities = [3, 0, 5, 0]
positive_quantities = []
for quantity in quantities:
if quantity > 0:
positive_quantities.append(quantity)
Упражнение¶
Создайте список из пяти вымышленных артикулов. Выведите их с нумерацией, добавьте шестой, замените третий и создайте отдельный список первых трёх. До каждого изменения запишите ожидаемую длину и содержимое.
Самопроверка¶
- Почему индекс последнего элемента списка из четырёх значений равен 3?
- Чем
appendотличается от замены по индексу? - Почему изменение через
aliasвидно вoriginal? - Как отфильтровать список без удаления во время обхода?