Python: уроки, справочник и задачи

Списки в Python: основные операции на примерах

Раздел: Списки, кортежи и множества · Обновлено 31.10.2026

Работа со списками в Python начинается с трех вещей: создания списка, доступа к элементам по индексу и изменения его содержимого. В статье по шагам показаны индексы и срезы, добавление через append() и extend(), удаление через del, remove() и pop(), генераторы списков, проверка in и перебор в цикле. В конце собраны встроенные функции для списков и типичные ошибки новичков.

В прошлой статье, мы довольно хорошо изучили работу с числами, в этой статье так же продолжим изучать типы данных python. На очереди у нас списки, разберем создание списков, срезы, добавление, удаление элементов.

Списки в Python: основные операции на примерах
Фото: ProjectManhattan / CC BY-SA 3.0, Wikimedia Commons
Содержание статьи
  1. Как создать список?
  2. Индекс списка
  3. Нарезка списков/Срезы
  4. Добавление/Изменение элементов списка
  5. Удалить элемент из списка
  6. Методы списка Python
  7. Генерирование списка
  8. Проверка наличия элемента в списке
  9. Итерация по списку
  10. Встроенные функции для списков
  11. Типичные ошибки при работе со списками
  12. Частые вопросы
    1. Чем append() отличается от extend()?
    2. Как узнать индекс элемента в списке?
    3. Как удалить все вхождения значения?
    4. Как перевернуть список?
    5. Чем список отличается от кортежа?

Как создать список?

Сразу определимся с тем, что список может содержать практические любые типы данных, int() , float(), string() и.т.д. Ниже рассмотрим списки, с различным содержанием.

list = [] #пустой список
list2 = [1,2,3,4] #int список
list3 = [1,2,'hello world',3.5] #список с комбинированными данными

Так же, список может содержать внутри себя еще один список.

list = [1,2,[23,'hello',21],5,7,8]

Индекс списка

Счет индекса в списках, в целом как и в программировании начинается с 0, список который имеет 5 элементов, будет иметь индекс от 0 до 4.

Оператором для получения нужного элемента являются квадратные скобки []. Если мы обратимся к несуществующему индексу, то получим ошибку IndexError. Индекс - это всегда целое число, и никак иначе. Доступ к вложенным спискам, так же осуществляется с помощью вложенной индексации, и так, поехали обкатывать теорию.

my_list = ['p', 'r', 'o', 'b', 'e'] #Наш список от 0 до 4
print(my_list[0]) # Первый элемент p
print(my_list[2]) #Третий элемент o
print(my_list[4]) # Пятый элемент e
n_list = ["Happy", [2, 0, 1, 5]]#Смешанный список
print(n_list[0][1]) # Второй элемент из первого списка a
print(n_list[1][3]) # Четвертый элемент из второго списка 5
print(my_list[4.0]) # Будет ошибка, так как индекс не является целым числом

Так же в Python есть и отрицательная индексация.

 my_list = ['p','r','o','b','e']
print(my_list[-1]) # последний элемент списка e
print(my_list[-5]) # Первый элемент списка p

Нарезка списков/Срезы

При обычной индексации, мы получали доступ к одному элементу списка, с помощью срезов, мы можем получить доступ к целому ряду элементов. Оператором среза является символ двоеточия : .

# List slicing in Python 
my_list = ['p','y','d','o','c','s','.','r','u'] 

print(my_list[2:5]) # ['d','o','c'] - элементы с индексами 2, 3, 4 
 
print(my_list[:-5]) # ['p','y','d','o'] - первые 4 элемента
 
print(my_list[5:]) # ['s','.','r','u'] 
 
print(my_list[:]) # ['p','y','d','o','c','s','.','r','u']

Срезы на мой взгляд для лучшего понимания, стоит визуализировать. Но в целом логи среза довольна проста, и удобна. Если мы хотим получить диапазон элементов, мы берем два индекса, для среза той части, которая нас интересует.

Нарезка списков/Срезы

Добавление/Изменение элементов списка

Как мы помним из статьи про типы данных, списки могут изменять значение своих элементов, в отличии от строк, или кортежа. Для изменения элемента, мы можем воспользоваться знакомым нам оператором присваивания =. Рассмотрим пример:

list = [1,2,3,4,5]
list[0] = 5 #Первому элементу списка присваиваем 5
print(list)
Результат:
[5,2,3,4,5]
list[1:4] = [4,6,8] # Заменяем диапазон элементов
print(list)
Результат:
[5,4,6,8,5]

Добавление новых элементов списка происходит так же просто. Если мы хотим добавить один элемент, используем метод append(), если хотим добавить несколько элементов, то метод extend().

list = [1,3,5,7]
list.append(6)
print(list)
Результат:
[1,3,5,7,6]
list.extend([9,20,25])
print(list)
Результат:
[1,3,5,7,6,9,20,25]

Так же не забываем и про оператор +, с помощью него, можно объединить два списка. Так же это называется и конкатенацией. И так же мы можем использовать оператор *, который повторит элемент в списке указанное количество раз. Пример:

 
list = [1,2,3] 
print(list + [9,8,7,]) 
Результат: [1,2,3,9,8,7] 
print(["pydocs"] * 3) 
Результат: 
["pydocs","pydocs","pydocs"]

Удалить элемент из списка

Как и в примере с добавление элементов, мы так же можем удалить один или несколько элементов из списка. Для удаление используется ключевое слово del.

# Удаление элементов списка
my_list = ['p', 'r', 'o', 'b', 'l', 'e', 'm']
# Удаление одного элемента
del my_list[2]
print(my_list)
# Удаление диапазона элементов
del my_list[1:5]
print(my_list)
# Удаление всего списка
del my_list

По мимо вышеописанного, мы так же можем воспользоваться методами списка. Метод remove(), для удаление элемента, или метод pop() для удаления элемента с заданным индексом.

Метод pop() удаляет и возвращает последний элемент если не указан индекс. Так же для очистки всего списка, мы можем воспользоваться методом clear().

list = ['p','r','o','b','l','e','m']
list.remove('p')
print(list)
# Результат ['r','o','b','l','e','m']
print(list.pop(1))
#Результат o
print(list)
# Результат ['r', 'b', 'l', 'e', 'm']
print(list.pop())
#Результат m
list.clear()
print(list)
#Результат []

Методы списка Python

Методы списка Python
append() - Добавить элемент в конец списка
extend() - Добавить все элементы списка в другой список
insert() - Вставить элемент в определенный индекс
remove() - Удаляет элемент из списка.
pop() - Удаляет и возвращает элемент с заданным индексом
clear() - Удаляет все элементы из списка
index() - Возвращает индекс первого совпадающего элемента
count() - Возвращает количество элементов, переданных в качестве аргумента
sort() - Сортировка элементов в списке в порядке возрастания
reverse() - Обратный порядок элементов в списке

Генерирование списка

В качестве примера, для генерации списка, рассмотрим вариант списка, где каждый последующий элемент увеличивается в два раза, определенное количество раз.

list = [2 ** x for x in range(10)]
print(list)
Результат:
[1, 2, 4, 8, 16, 32, 64, 128, 256, 512]
#Код получился в одну строку, ниже эквивалент этого же кода
list = []
for x in range(10):
    list.append(2 ** x)
Результат:
[1, 2, 4, 8, 16, 32, 64, 128, 256, 512]

Генератор списков, так же может содержать в себе и определенные условия, по которым будет генерироваться список.

list = [2 ** x for x in range(10) if x > 5]
print(list)
Результат:
[64, 128, 256, 512]
list2 = [x for x in range(20) if x % 2 == 1]
print(list2)
[1, 3, 5, 7, 9, 11, 13, 15, 17, 19]

Проверка наличия элемента в списке

С помощью ключевого слова in, мы можем проверить существование элемента в списке.

list = ['p','r','o','b','l','e','m']
print('p' in list)
print('a' in list)
print('c' not in list)
Результат:
True
False
True

Итерация по списку

Итерацию по списку мы с вами рассматривали в статье про цикл for, немного повторим пройденный материал.

list = ['Яблоко', 'Банан','Груша','Клубника' ]
for fruct in list:
    print("Я люблю", fruct)
Результат:
Я люблю Яблоко
Я люблю Банан
Я люблю Груша
Я люблю Клубника

Встроенные функции для списков

Помимо методов, со списками работают встроенные функции. Они не меняют исходный список, а возвращают новое значение, поэтому их удобно использовать в выражениях.

ФункцияРезультатПример для [3, 1, 2]
len()количество элементов3
sum()сумма чисел6
min(), max()наименьший и наибольший элемент1 и 3
sorted()новый отсортированный список[1, 2, 3]
reversed()итератор в обратном порядке3 -> 2 -> 1 при переборе
enumerate()пары (индекс, элемент)(0, 3), (1, 1), (2, 2)

Разница между sorted(nums) и nums.sort() в том, что метод сортирует список на месте и возвращает None. Параметры key и reverse подробно разобраны в статье про сортировку списка.

nums = [3, 1, 2]
print(sorted(nums), nums)  # [1, 2, 3] [3, 1, 2]
result = nums.sort()
print(result, nums)        # None [1, 2, 3]

for i, value in enumerate(nums, start=1):
    print(i, value)

Типичные ошибки при работе со списками

Большинство багов со списками связано с тем, что переменная хранит ссылку на объект, а не сам объект. Присваивание b = a не копирует список: обе переменные указывают на одни и те же данные.

a = [1, 2, 3]
b = a          # та же ссылка
c = a.copy()   # новый список
a.append(4)
print(b)  # [1, 2, 3, 4]
print(c)  # [1, 2, 3]

Способы получить независимую копию, включая вложенные списки, собраны в статье как скопировать список, а полный перечень методов с параметрами есть на странице методы списка Python.

Частые вопросы

Ответы на вопросы, которые часто задают при первом знакомстве со списками.

Чем append() отличается от extend()?

append() добавляет объект целиком как один элемент, даже если это другой список. extend() перебирает переданный объект и добавляет каждый его элемент по отдельности.

Как узнать индекс элемента в списке?

Метод index() возвращает индекс первого совпадения: ["a", "b"].index("b") вернет 1. Если значения нет, будет ValueError, поэтому сначала проверьте его через in.

Как удалить все вхождения значения?

remove() удаляет только первое совпадение. Чтобы убрать все, создайте новый список: nums = [x for x in nums if x != 0].

Как перевернуть список?

Метод reverse() меняет порядок на месте, срез nums[::-1] возвращает перевернутую копию, а reversed() дает итератор для цикла.

Чем список отличается от кортежа?

Список изменяемый: в него можно добавлять и удалять элементы. Кортеж после создания не меняется, зато может быть ключом словаря и занимает немного меньше памяти.