Объект списка в Python: всё, что нужно знать

Раздел: Основы Python -> Списки

Объект списка в Python

Как создать список наиболее эффективно и с минимальным кодом?

Лучший способ для генерации списка на основе другой последовательности или правила - это списковое включение (list comprehension). Оно работает быстрее, чем цикл с append, и читается лаконично.


squares = [x**2 for x in range(10)]
print(squares)
  

посчитать список python (посчитать элементы списка в python)

[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
  

функция длина списка в python (длина списка в python)

Пример с условием:


even_squares = [x**2 for x in range(10) if x % 2 == 0]
print(even_squares)
  

количество чисел python (количество чисел в python)

[0, 4, 16, 36, 64]
  

получить индекс python (получение индекса элемента в python)

Типичная ошибка: забыть квадратные скобки или перепутать порядок for и if. Всегда ставьте if после for.

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

Два основных способа:


empty1 = []
empty2 = list()
print(empty1, empty2)
  

Python список значений (список значений в python)

[] []
  

Python список чисел (список чисел в python)

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

Ошибка: list не вызывает конструктор без аргументов неявно, но [] всегда создает новый список.

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

Используйте list() на строке:


chars = list('hello')
print(chars)
  

вывод элемента массива python (вывод элемента массива в python)

['h', 'e', 'l', 'l', 'o']
  

Python списки добавление (добавление элемента в список python)

Для разделения по другому признаку применяйте split().

Как добавить один элемент в конец списка?

Метод append:


items = [1, 2]
items.append(3)
print(items)
  

метод добавления в список python (метод добавления элемента в список в python)

[1, 2, 3]
  

задания python списки (задания на списки в python)

Этот метод работает за O(1) амортизированно.

Распространенная ошибка: путать append с extend. append добавляет один объект (даже список) как элемент.


a = [1]
a.append([2,3])
print(a)
    

изменить элементы списка python (изменение элементов списка в python)

[1, [2, 3]]
    

Python list индекс элемента (индекс элемента в списке python)

Как объединить два списка или добавить несколько элементов?

Метод extend или оператор +=:


list1 = [1, 2]
list2 = [3, 4]
list1.extend(list2)
print(list1)

list3 = [5, 6]
list3 += [7, 8]
print(list3)
  

Python элементы списка в другой список (копирование элементов списка в другой список)

[1, 2, 3, 4]
[5, 6, 7, 8]
  

Python 3 append (метод append в python 3)

Оператор += вызывает extend внутри себя.

Ошибка: попытка использовать append для добавления нескольких элементов - получится вложенный список.

Как вставить элемент в произвольную позицию?

Метод insert:


nums = [1, 2, 4]
nums.insert(2, 3)  # вставить 3 на индекс 2
print(nums)
  

метод добавления элемента в список python (методы добавления элемента в список)

[1, 2, 3, 4]
  

поменять элементы местами python (обмен элементов местами)

Если индекс больше длины, элемент вставляется в конец.

Как удалить элемент по значению?

Метод remove удаляет первое вхождение:


colors = ['red', 'green', 'blue', 'green']
colors.remove('green')
print(colors)
  

Python list object (объект списка в python)

['red', 'blue', 'green']
  

списки python определение (определение списков в python)

Ошибка: если элемент не найден, возникает ValueError. Перед удалением проверяйте наличие через in.

Как удалить элемент по индексу и получить его?

Метод pop:


nums = [10, 20, 30]
last = nums.pop()
print(last, nums)

second = nums.pop(1)
print(second, nums)
  

найти список в списке python (поиск вложенного списка в списке python)

30 [10, 20]
20 [10]
  

поиск элемента в списке python (поиск элемента в списке)

Без аргумента удаляет последний элемент.

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

Оператор del:


nums = [1, 2, 3, 4, 5]
del nums[1:3]
print(nums)
del nums[:]
print(nums)
  

получение элемента списка python (получение элемента списка по индексу)

[1, 4, 5]
[]
  

Last index python (последний индекс в python)

Метод clear() делает то же самое.

Как получить доступ к элементу по отрицательному индексу?

Отрицательные индексы отсчитывают с конца:


nums = [10, 20, 30, 40]
print(nums[-1], nums[-2])
  

Python program list (программа для работы со списком python)

40 30
  

новый список python (создание нового списка в python)

Ошибка: выход за границы диапазона вызывает IndexError. Для безопасного доступа используйте проверку длины.

Как получить подсписок (срез)?

Синтаксис list[start:stop:step]:


nums = [0, 1, 2, 3, 4, 5]
print(nums[1:4])
print(nums[::-1])
  

создать массив чисел python (создание массива (списка) чисел в python)

[1, 2, 3]
[5, 4, 3, 2, 1, 0]
  

Python удалить элемент из списка по индексу (удаление элемента из списка по индексу)

Срез всегда возвращает новый список (копию), даже если выбрать весь список (nums[:]).

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

Для сортировки на месте - метод sort(), для создания новой отсортированной копии - функция sorted():


nums = [3, 1, 4, 1, 5]
nums.sort()
print(nums)

untr = [2, 3, 1]
sorted_copy = sorted(untr)
print(untr, sorted_copy)
  

количество значений списка python (количество элементов в списке (len) в python)

[1, 1, 3, 4, 5]
[2, 3, 1] [1, 2, 3]
  

вывести элементы списка python (вывод элементов списка python)

Оба принимают аргументы key и reverse.

Ошибка: случайное использование sort() с возвращаемым значением (None) вместо sorted().

Как изменить порядок элементов на обратный?

Метод reverse() меняет на месте, функция reversed() возвращает итератор:


nums = [1, 2, 3]
nums.reverse()
print(nums)

rev_iter = reversed(nums)
print(list(rev_iter))
  

динамические списки python (динамические списки в python)

[3, 2, 1]
[1, 2, 3]
  

Python добавить в список (добавление элемента в список python)

Как скопировать список, чтобы изменение копии не влияло на оригинал?

Поверхностная копия через срез [:], метод copy() или list():


original = [1, [2, 3]]
copy1 = original[:]
copy2 = original.copy()
copy3 = list(original)
print(copy1, copy2, copy3)
  

как добавить массив в массив python (добавление массива в массив (списка в список) в python)

[1, [2, 3]] [1, [2, 3]] [1, [2, 3]]
  

значение элемента списка python (значение элемента списка python)

Важно: эти способы делают поверхностную копию. Вложенные изменяемые объекты остаются общими. Для полной независимости используйте copy.deepcopy() из модуля copy.


import copy
deep = copy.deepcopy(original)
    

Python список индексов значений (получение индексов элементов списка в python)

Как проверить наличие элемента в списке?

Оператор in:


nums = [1, 2, 3]
print(2 in nums)
print(5 in nums)
  

количество чисел в списке python (подсчет количества чисел в списке в python)

True
False
  

Python число элементов списка (число элементов списка python)

Также можно получить индекс через index(), но он вызывает ValueError при отсутствии.

Как перебрать список с получением индекса и значения?

Функция enumerate:


fruits = ['apple', 'banana', 'cherry']
for idx, fruit in enumerate(fruits):
    print(idx, fruit)
  

максимальный элемент python (максимальный элемент списка python)

0 apple
1 banana
2 cherry
  

номер элемента python (номер элемента в списке python)

Можно задать начальное значение индекса вторым аргументом.

Как применить функцию ко всем элементам списка?

Списковое включение (наиболее эффективно) или функция map:


strings = ['1', '2', '3']
numbers = [int(s) for s in strings]
print(numbers)

numbers2 = list(map(int, strings))
print(numbers2)
  

Python первые элементы списка (первые элементы списка python)

[1, 2, 3]
[1, 2, 3]
  

Python список первый элемент (первый элемент списка python)

map возвращает итератор, поэтому оборачиваем в list().

Как отфильтровать элементы списка по условию?

Списковое включение с if или функция filter:


nums = [1, 2, 3, 4, 5]
evens = [n for n in nums if n % 2 == 0]
print(evens)

evens2 = list(filter(lambda x: x % 2 == 0, nums))
print(evens2)
  

повторение списка python (повторение списка в python)

[2, 4]
[2, 4]
  

индекс элемента массива python (индекс элемента массива python)

Как объединить два списка в пары (как в словаре)?

Функция zip:


keys = ['a', 'b', 'c']
values = [1, 2, 3]
pairs = list(zip(keys, values))
print(pairs)
  

как найти элемент в списке python (поиск элемента в списке python)

[('a', 1), ('b', 2), ('c', 3)]
  

Python получить элемент списка (получение элемента списка python)

Если списки разной длины, zip останавливается на коротком.

Как создать многомерный список (например, матрицу)?

Вложенные списковые включения:


matrix = [[i * j for j in range(1, 4)] for i in range(1, 4)]
for row in matrix:
    print(row)
  

Python последний элемент списка (последний элемент списка python)

[1, 2, 3]
[2, 4, 6]
[3, 6, 9]
  

произведение элементов python (произведение элементов списка python)

Частая ошибка: создание матрицы с помощью повторения одного списка ([[0]*3]*3), что приводит к ссылкам на один вложенный список.

Как использовать список как стек или очередь?

Для стека (LIFO) используйте append и pop. Для очереди (FIFO) лучше использовать collections.deque:


from collections import deque
queue = deque(['a', 'b'])
queue.append('c')
first = queue.popleft()
print(first, queue)
  

Python число данных в списке (количество чисел в списке в python)

a deque(['b', 'c'])
  
- сумма элементов массива python (сумма элементов массива python)
- Python список сумма (сумма элементов списка в python)
- удалить значение из списка python (удаление элемента из списка по значению в python)

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

Ниже приведены подробные и нестандартные примеры, демонстрирующие скрытые возможности и подводные камни списков Python.

Пример 1. Создание глубокой копии вложенного списка

Пример

import copy
original = [[1, 2], [3, 4]]
shallow = original[:]
deep = copy.deepcopy(original)

shallow[0][0] = 99
print('Original:', original)
print('Shallow:', shallow)
print('Deep:', deep)
Original: [[99, 2], [3, 4]]
Shallow: [[99, 2], [3, 4]]
Deep: [[1, 2], [3, 4]]

Поверхностная копия копирует только внешний список, внутренние списки остаются общими. Глубокая копия создает независимые копии всех вложенных объектов.

Пример 2. Сортировка списка строк по длине и алфавиту

Пример

words = ['python', 'java', 'c', 'javascript', 'go']
words.sort(key=lambda x: (len(x), x))
print(words)
['c', 'go', 'java', 'python', 'javascript']

Аргумент key может быть кортежем для множественной сортировки. Сначала сравнивается длина, при равенстве - лексикографически.

Пример 3. Списочное включение с несколькими циклами (декартово произведение)

Пример

colors = ['red', 'green']
sizes = ['S', 'M', 'L']
products = [f'{c} {s}' for c in colors for s in sizes]
print(products)
['red S', 'red M', 'red L', 'green S', 'green M', 'green L']

Порядок вложенных for соответствует порядку вложенных циклов.

Пример 4. Использование reduce для нахождения произведения элементов

Пример

from functools import reduce
import operator

nums = [1, 2, 3, 4, 5]
product = reduce(operator.mul, nums, 1)
print(product)
120

Функция reduce поочередно применяет операцию к элементам. Начальное значение 1 защищает от пустого списка.

Пример 5. Группировка элементов списка по ключу (без дополнительных библиотек)

Пример

data = ['apple', 'banana', 'avocado', 'apricot', 'blueberry']
grouped = {}
for fruit in data:
    key = fruit[0]
    grouped.setdefault(key, []).append(fruit)
print(grouped)
{'a': ['apple', 'avocado', 'apricot'], 'b': ['banana', 'blueberry']}

Метод setdefault создает пустой список, если ключ отсутствует, и возвращает его, минимизируя проверки.

Пример 6. Фильтрация списка с удалением дубликатов с сохранением порядка

Пример

items = [3, 1, 2, 3, 1, 4, 2]
seen = set()
unique = [x for x in items if not (x in seen or seen.add(x))]
print(unique)
[3, 1, 2, 4]

Используется побочный эффект seen.add(x) (возвращает None, который приводит к False) для добавления в множество. Альтернативный метод - dict.fromkeys(items).

Пример 7. Разворачивание вложенного списка (flatten) любой глубины рекурсивно

Пример

def flatten(lst):
    result = []
    for elem in lst:
        if isinstance(elem, list):
            result.extend(flatten(elem))
        else:
            result.append(elem)
    return result

nested = [1, [2, [3, 4], 5], 6]
print(flatten(nested))
[1, 2, 3, 4, 5, 6]

Рекурсивный подход универсален, но может превысить глубину рекурсии для очень глубоких списков. Для известного числа уровней проще использовать вложенные циклы.

Пример 8. Перестановка столбцов матрицы (транспонирование)

Пример

matrix = [[1, 2, 3],
          [4, 5, 6]]
transposed = [[row[i] for row in matrix] for i in range(len(matrix[0]))]
for row in transposed:
    print(row)
[1, 4]
[2, 5]
[3, 6]

Используется два вложенных цикла: внешний по столбцам, внутренний по строкам. Эффективнее применить zip(*matrix).

Пример 9. Быстрое создание диапазона чисел с плавающей точкой (аналог arange)

Пример

start, stop, step = 0.0, 1.0, 0.2
floats = []
current = start
while current < stop:
    floats.append(current)
    current += step
print(floats)
[0.0, 0.2, 0.4, 0.6000000000000001, 0.8]

Из-за неточности арифметики с плавающей точкой последнее значение может быть немного меньше ожидаемого. Для серьезной работы используйте numpy.linspace или округление.

Пример 10. Список из объектов разных типов с проверкой полиморфизма

Пример

class Dog:
    def speak(self):
        return 'Woof'

class Cat:
    def speak(self):
        return 'Meow'

animals = [Dog(), Cat(), Dog()]
sounds = [animal.speak() for animal in animals]
print(sounds)
['Woof', 'Meow', 'Woof']

Список может содержать любые объекты, поддерживающие нужные методы (утиная типизация).

Объект списка в Python - comments

En
Python list object (python)