Python списки: практические примеры и решения

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

Основные операции со списками

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

Наиболее эффективный способ - использование list comprehension.

squares = [x**2 for x in range(1, 11)]

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

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

Python массив последнего элемента (получение последнего элемента массива)

Этот метод работает быстро, код компактен и легко читается.

Альтернативный вариант с циклом for и методом append:

squares = []
for x in range(1, 11):
    squares.append(x**2)

массив python примеры (примеры массивов в python)

Такой способ требует больше строк, но даёт тот же результат и позволяет выполнить дополнительные действия внутри цикла.

Ещё один вариант - функция map:

squares = list(map(lambda x: x**2, range(1, 11)))

списки в python примеры (примеры работы со списками в python)

При использовании map в Python 3 возвращается итератор, поэтому его нужно преобразовать в список через list(). В противном случае результат не будет выведен как список. Также lambda может показаться менее читаемой для новичков.

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

Срез (slicing) - самый простой и эффективный способ.

nums = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
sub = nums[2:6]

Append python (метод append() списка в python)

[2, 3, 4, 5]

Python массив типов (массив типов в python)

Синтаксис list[start:stop:step] позволяет гибко выбирать элементы.

Можно также использовать цикл с условием:

sub = []
for i in range(2, 6):
    sub.append(nums[i])

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

Этот вариант менее производителен и более громоздкий.

Частая ошибка - путаница с индексами: срез nums[2:6] включает элемент с индексом 2, но не включает элемент с индексом 6. Если указать неверные индексы, можно получить пустой список или неожиданный подсписок.

Также срез создаёт поверхностную копию списка. Для изменяемых вложенных объектов это может привести к неожиданным изменениям.

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

Оператор + для конкатенации списков - самый короткий и эффективный способ.

list1 = [1, 2, 3]
list2 = [4, 5, 6]
result = list1 + list2

списки в языке программирования python (списки в языке python)

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

Python print array (вывод массива python)

Операция возвращает новый список, не изменяя исходные.

Метод extend изменяет исходный список, добавляя элементы из другого итерабельного объекта:

list1.extend(list2)

Python большие массивы (работа с большими массивами в python)

После выполнения list1 станет [1, 2, 3, 4, 5, 6]. Этот способ полезен, когда нужно модифицировать существующий список без создания нового.

Цикл с append - ещё один вариант:

for item in list2:
    list1.append(item)

двумерные списки в python (двумерные списки в python)

Однако он менее эффективен и менее читаем.

При использовании extend важно помнить, что он принимает любой итерабельный объект, например строку. Если передать строку, каждый символ станет отдельным элементом, что может быть неожиданностью.

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

Метод remove - наиболее прямой способ удалить первое вхождение заданного значения.

fruits = ['apple', 'banana', 'cherry', 'banana']
fruits.remove('banana')

Integer array python (список целых чисел в python)

['apple', 'cherry', 'banana']

Python массивы типы данных (массивы и типы данных в python)

Удаляется только первый найденный элемент.

Можно использовать цикл с условием и удаление по индексу:

for i, fruit in enumerate(fruits):
    if fruit == 'banana':
        del fruits[i]
        break

Этот способ даёт больше контроля, но требует больше кода и осторожности при изменении списка во время итерации.

Фильтрация через list comprehension с условием создаёт новый список без удаляемых элементов:

fruits = [f for f in fruits if f != 'banana']

В этом случае удаляются все вхождения, а не только первое.

Метод remove вызывает ошибку ValueError, если значение отсутствует в списке. Перед удалением рекомендуется проверять наличие через оператор in или перехватывать исключение.

Изменение списка во время итерации с помощью del/remove может пропустить некоторые элементы или привести к IndexError.

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

Встроенная функция sorted - универсальный способ, возвращающий новый отсортированный список.

nums = [3, 1, 4, 1, 5, 9, 2, 6]
sorted_nums = sorted(nums)
[1, 1, 2, 3, 4, 5, 6, 9]

Исходный список остаётся неизменным.

Метод sort сортирует список на месте, не создавая нового:

nums.sort()

Это экономит память, но меняет исходный список.

Для сортировки по убыванию используется параметр reverse=True.

Если список содержит элементы разных типов (например, числа и строки), Python вызовет TypeError. Необходимо привести все элементы к одному типу или использовать ключ сортировки key.

Сортировка списка строк по умолчанию зависит от кодировки (лексикографический порядок по Unicode). Для регистронезависимой сортировки применяют key=str.lower.

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

Срез с шагом -1 создаёт новый перевёрнутый список.

nums = [1, 2, 3, 4, 5]
reversed_nums = nums[::-1]
[5, 4, 3, 2, 1]

Этот способ работает очень быстро и не изменяет исходный список.

Метод reverse изменяет список на месте:

nums.reverse()

Функция reversed возвращает итератор, который можно преобразовать в список:

reversed_nums = list(reversed(nums))

Такой подход удобен, если требуется обрабатывать элементы по одному.

При использовании среза [::-1] необходимо помнить, что он создаёт поверхностную копию. Для вложенных списков это может быть недостатком.

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

Оператор in - самый читаемый и быстрый способ.

colors = ['red', 'green', 'blue']
if 'green' in colors:
    print('Найден')
Найден

Для ускорения поиска в больших списках можно преобразовать список во множество (set), если порядок не важен.

Метод index возвращает индекс первого вхождения или вызывает ValueError:

index = colors.index('green')

Этот способ даёт не только факт наличия, но и позицию элемента.

Цикл с перебором - самый неэффективный вариант:

found = False
for color in colors:
    if color == 'green':
        found = True
        break

Метод index при отсутствии элемента вызывает исключение. Рекомендуется сначала проверять через in, либо перехватывать ValueError.

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

Ниже приведены более сложные сценарии использования списков в Python. Для каждого примера показан код и результат его выполнения.

Глубокое копирование вложенного списка

Обычное присваивание или срез создают поверхностную копию. Для полной независимой копии используется модуль copy.

Пример
import copy
original = [[1, 2], [3, 4]]
shallow = original[:]
deep = copy.deepcopy(original)
original[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]]

Глубокое копирование рекурсивно копирует все вложенные объекты, что предотвращает случайное изменение.

Использование deepcopy может быть медленным для больших структур. Если вложенные списки содержат только неизменяемые объекты (числа, строки), поверхностного копирования достаточно.

Энумерация для доступа к индексу и значению

Функция enumerate возвращает пары (индекс, элемент) при итерации.

Пример
fruits = ['apple', 'banana', 'cherry']
for idx, fruit in enumerate(fruits, start=1):
    print(f'{idx}. {fruit}')
1. apple
2. banana
3. cherry

Параметр start позволяет задать начальное значение индекса.

Сортировка строк по длине

Параметр key задаёт функцию, по результату которой производится сортировка.

Пример
words = ['python', 'java', 'c', 'javascript']
words.sort(key=len)
print(words)
['c', 'java', 'python', 'javascript']

Можно использовать лямбду для более сложных критериев, например, сначала по длине, затем по алфавиту.

Фильтрация списка с помощью filter

Функция filter принимает функцию-предикат и возвращает итератор с элементами, для которых предикат истинен.

Пример
nums = [10, 15, 20, 25, 30]
even = list(filter(lambda x: x % 2 == 0, nums))
print(even)
[10, 20, 30]

Этот способ лаконичен, но для сложных условий часто предпочитают list comprehension.

Параллельная итерация с zip

zip объединяет несколько списков в кортежи по индексам.

Пример
names = ['Alice', 'Bob', 'Charlie']
scores = [85, 92, 78]
for name, score in zip(names, scores):
    print(f'{name}: {score}')
Alice: 85
Bob: 92
Charlie: 78

Если списки разной длины, zip останавливается на самом коротком. Для сохранения всех элементов используйте zip_longest из itertools.

List comprehension с несколькими условиями

Можно комбинировать условия с помощью and, or.

Пример
nums = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
result = [x for x in nums if x % 2 == 0 and x > 5]
print(result)
[6, 8, 10]

Допускается также вложенные циклы: [x*y for x in [1,2] for y in [3,4]].

Свёртка списка с reduce

reduce из модуля functools применяет функцию к элементам, накапливая результат.

Пример
from functools import reduce
numbers = [1, 2, 3, 4]
product = reduce(lambda a, b: a * b, numbers)
print(product)
24

Можно задать начальное значение: reduce(func, iterable, initial).

В Python 3 reduce вынесен в модуль functools, его необходимо импортировать. Для многих задач list comprehension или sum более читаемы.

Удаление дубликатов с сохранением порядка

Преобразование во множество теряет порядок. Для сохранения порядка можно использовать dict.fromkeys или цикл.

Пример
nums = [1, 2, 2, 3, 1, 4, 5, 4]
unique = list(dict.fromkeys(nums))
print(unique)
[1, 2, 3, 4, 5]

Этот подход работает благодаря тому, что словари сохраняют порядок вставки (начиная с Python 3.7).

Транспонирование матрицы (списка списков)

Использование zip с распаковкой позволяет легко транспонировать матрицу.

Пример
matrix = [
    [1, 2, 3],
    [4, 5, 6],
    [7, 8, 9]
]
transposed = list(zip(*matrix))
for row in transposed:
    print(row)
(1, 4, 7)
(2, 5, 8)
(3, 6, 9)

Результат - кортежи. Если нужны списки, можно дополнительно преобразовать каждую строку: list(map(list, zip(*matrix))).

Примеры работы со списками в Python - comments

En
списки в python примеры (python)