Списки в Python — это как швейцарский нож для любого разработчика. Они хранят любые элементы, изменяемы и поддерживают кучу удобных методов. Но вот ты только начал писать скрипт, и тут встает вопрос: как добавить элемент в список? Вариантов несколько, и у каждого свои приколы. Давай разберёмся, где использовать append()
, когда нужен insert()
, а в каких случаях не обойтись без extend()
.
Зачем это вообще нужно?
Добавление элементов — базовая операция. Ты парсишь логи, собираешь данные с API, строишь пайплайн обработки — почти всегда нужно динамически расширять список. Если делать это неправильно, можно получить неожиданные баги, странные ошибки или просто неэффективный код.
Что потребуется
- Python — версия 3.6+ (но всё нижеописанное работает даже в Python 2.7, если вдруг ты динозавр).
- Любая ОС: Windows, Linux, macOS — без разницы.
- Железо? Хватит даже Raspberry Pi Zero 🙂
- IDE или редактор кода (VS Code, PyCharm, vim, nano — по вкусу).
Установка Python (если вдруг нет)
- Проверь, есть ли Python:
python --version
или
python3 --version
- Если нет — скачай и поставь тут.
- В Linux:
sudo apt update && sudo apt install python3
- В macOS:
brew install python
Использование: полный список команд и вариантов
Вот где начинается веселье. Смотри, есть три основных метода:
1. append()
Добавляет один элемент в конец списка.
fruits = ['apple', 'banana']
fruits.append('orange')
print(fruits) # ['apple', 'banana', 'orange']
Если зааппендить список, то он добавится как один элемент:
fruits.append(['kiwi', 'mango'])
print(fruits) # ['apple', 'banana', 'orange', ['kiwi', 'mango']]
2. insert()
Вставляет один элемент на нужную позицию (по индексу).
numbers = [1, 2, 4]
numbers.insert(2, 3) # Вставить 3 на позицию с индексом 2
print(numbers) # [1, 2, 3, 4]
Если индекс больше длины списка — добавит в конец. Если меньше нуля — в начало.
3. extend()
Добавляет все элементы из другого итерируемого объекта (list
, tuple
, set
, str
и т.д.) в конец списка.
fruits = ['apple', 'banana']
fruits.extend(['cherry', 'melon'])
print(fruits) # ['apple', 'banana', 'cherry', 'melon']
Можно даже так (но осторожно!):
fruits.extend('peach')
print(fruits) # ['apple', 'banana', 'cherry', 'melon', 'p', 'e', 'a', 'c', 'h']
Ошибки и как делать не надо
- append вместо extend: Очень частый баг — делаешь
mylist.append([1,2,3])
и получаешь[[1,2,3]]
вместо[1,2,3]
. - extend строкой:
mylist.extend('abc')
добавит три элемента:'a'
,'b'
,'c'
. Не всегда ожидаемо. - insert в огромные списки: Вставка в начало (
insert(0, ...)
) у больших списков медленная — O(n). Лучше избегать в критичных местах. - Использовать
+
для расширения:mylist = mylist + [4,5]
создаёт новый объект — не всегда это надо (особенно если список большой).
Пример реального использования в окружении
Допустим, ты пишешь парсер логов для nginx. Собираешь IP-адреса, которые делали запросы к серверу:
ips = []
with open('access.log') as f:
for line in f:
ip = line.split()[0]
ips.append(ip)
А если ты собираешь сразу пачку IP из разных файлов:
all_ips = []
for logfile in ['access1.log', 'access2.log']:
with open(logfile) as f:
ips = [line.split()[0] for line in f]
all_ips.extend(ips)
Если нужно вставить «служебный» IP в начало списка:
all_ips.insert(0, '127.0.0.1')
Заключение
В Python куча способов добавить элемент в список, и у каждого метода своя задача. append()
— для одного элемента, insert()
— для вставки на нужное место, extend()
— для пачки элементов. Не путай их, и твой код будет чище и предсказуемей.
Официальная дока: https://docs.python.org/3/tutorial/datastructures.html#more-on-lists
Если что — всегда можно проверить руками в python
REPL. Удачи!
Ваш отзыв