Программы с массивами на Python: от основ до продвинутых приёмов

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

Программы с массивами на Python: основные способы и примеры

В Python под термином «массив» чаще всего понимают список (list) - изменяемую упорядоченную коллекцию элементов. Списки широко используются для хранения данных, их обработки и преобразования. В этом разделе рассматриваются различные подходы к работе со списками, включая создание, модификацию, поиск, сортировку и копирование. Для каждой задачи предлагается основное эффективное решение и альтернативные варианты.

Как создать список чисел от 0 до 9?

numbers = list(range(10))

вложенные структуры данных в python (вложенные структуры данных в python)

Пояснение:

Функция range(10) генерирует последовательность от 0 до 9, а list() преобразует её в список. Это лаконичный и быстрый способ, особенно для арифметических прогрессий.
numbers = [i for i in range(10)]

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

Вариант с list comprehension:

Аналогично, но используется генератор списков. Удобно, когда нужно применить выражение: [i*2 for i in range(10)].
from array import array
numbers = array('i', range(10))

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

Модуль array:

Создаёт массив с элементами одного типа (здесь - целые числа). Занимает меньше памяти, но методы изменяемости ограничены. Подходит для числовых данных, когда важна экономия памяти.

Типичные ошибки:

  • Путаница с кортежем: numbers = (1,2,3) создаёт неизменяемую коллекцию.
  • Использование range без list() даёт объект-генератор, а не список.

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

numbers = [1, 2, 3]
numbers.append(4)

массивы данных python 3 (массивы данных в python)

Пояснение:

Метод append добавляет один элемент в конец. Время операции - O(1) в среднем. Это стандартный способ.
numbers.extend([5, 6])

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

Добавление нескольких элементов:

extend принимает итерируемый объект и добавляет каждый его элемент.
numbers += [7, 8]

последовательности в python и способы их реализации (последовательности в python и способы их реализации)

Оператор +=:

Аналогичен extend, но создаёт новый список при присваивании, что может быть менее эффективно для больших данных.

Проблема:

Изменение списка во время итерации по нему приводит к ошибке RuntimeError: list changed during iteration. Для безопасного удаления элементов во время обхода создавайте копию или используйте while.

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

items = [10, 20, 30]
if 20 in items:
    print('Элемент найден')

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

Пояснение:

Оператор in выполняет линейный поиск. Для больших списков лучше предварительно отсортировать и использовать bisect, или преобразовать в множество.
index = items.index(20)  # возвращает индекс первого вхождения

Python пар (пары (ключ-значение) в python)

Поиск индекса:

Метод index находит позицию элемента. Если элемента нет - выбрасывается исключение ValueError.
count = items.count(20)  # количество вхождений

Python разница списков (разница между списками и кортежами в python)

Типичная ошибка:

Попытка удалить элемент без проверки его наличия: items.remove(40) вызовет ValueError. Всегда проверяйте наличие перед удалением или используйте условие.

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

items = [3, 1, 2]
items.sort()  # изменяет исходный список

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

Пояснение:

Метод sort() сортирует список на месте. Для получения новой отсортированной копии используют функцию sorted(items).
sorted_items = sorted(items, reverse=True)

списки в языке python (списки в python)

Сортировка по убыванию:

Параметр reverse=True меняет порядок.
sorted_items = sorted(items, key=lambda x: x['name'])

упорядоченные структуры данных в python (упорядоченные структуры данных в python)

Сортировка по ключу:

Для списка словарей сортировка по полю с помощью key.

Проблема:

Сортировка списка, содержащего элементы разных типов (например, числа и строки), вызовет TypeError. Убедитесь, что все элементы сравнимы.

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

original = [1, 2, [3, 4]]
shallow_copy = original.copy()  # или original[:]

значения списка числа python (итерация по значениям списка чисел в python)

Пояснение:

Метод copy() создаёт поверхностную копию: внутренние объекты (вложенные списки) остаются теми же. Для полной независимости используйте deepcopy.
import copy
deep_copy = copy.deepcopy(original)

словарь set python (словарь и set в python)

Глубокое копирование:

Рекурсивно копирует все вложенные объекты. Подходит для сложных структур.

Типичная ошибка:

Присваивание new = original не создаёт копию, а только новую ссылку на тот же объект. Изменение new отразится на original.

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

rows, cols = 3, 4
matrix = [[0]*cols for _ in range(rows)]

Python dict set (словарь и множество в python)

Пояснение:

Генератор списков создаёт каждую строку как новый список. Это надёжный способ, гарантирующий независимость строк.
matrix = [[0]*cols]*rows  # НЕПРАВИЛЬНО!

типы структур python (типы структур данных в python)

Ошибка:

Такая конструкция создаёт rows ссылок на один и тот же список. Изменение одного элемента повлияет на все строки.
import numpy as np
matrix = np.zeros((rows, cols), dtype=int)

Библиотека NumPy:

Для числовых расчётов NumPy предоставляет эффективные многомерные массивы. Однако это выходит за рамки стандартного Python.

Частая проблема:

Забывают про ссылочную природу списков. При инициализации матрицы всегда используйте генератор for _ in range(rows).

Дополнительные примеры и приёмы работы с массивами

1. Использование array.array для экономии памяти

Пример
from array import array
arr = array('d', [1.5, 2.3, 3.7])  # массив чисел с плавающей точкой (double)
arr.append(4.1)
print(arr)
# array('d', [1.5, 2.3, 3.7, 4.1])
array('d', [1.5, 2.3, 3.7, 4.1])

Массив array хранит элементы одного типа (здесь 'd' - double). Занимает меньше памяти, чем список, но поддерживает не все методы (например, нет sort). Подходит для больших числовых данных.

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

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

Используется оператор распаковки * для передачи строк матрицы в zip, который собирает элементы по столбцам. Затем каждая группа преобразуется в список.

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

Пример
words = ['apple', 'pear', 'banana', 'kiwi']
sorted_words = sorted(words, key=len, reverse=True)
print(sorted_words)
# ['banana', 'apple', 'pear', 'kiwi']
['banana', 'apple', 'pear', 'kiwi']

Параметр key=len задаёт функцию вычисления ключа сортировки. Аналогично можно сортировать по последней букве: key=lambda x: x[-1].

4. Группировка элементов по условию

Пример
numbers = [1, 2, 3, 4, 5, 6]
even = [x for x in numbers if x % 2 == 0]
odd = [x for x in numbers if x % 2 != 0]
print('Чётные:', even, 'Нечётные:', odd)
# Чётные: [2, 4, 6] Нечётные: [1, 3, 5]
Чётные: [2, 4, 6] Нечётные: [1, 3, 5]

Два прохода - простое решение. Для одного прохода можно использовать filter и lambda или словарь списков.

5. Применение нескольких функций к элементам с map

Пример
def square(x):
    return x**2

def cube(x):
    return x**3

numbers = [1, 2, 3, 4]
result = list(map(lambda x: (square(x), cube(x)), numbers))
print(result)
# [(1, 1), (4, 8), (9, 27), (16, 64)]
[(1, 1), (4, 8), (9, 27), (16, 64)]

Функция map возвращает итератор. Преобразование в список даёт кортеж из результатов двух функций для каждого числа.

6. Слияние двух списков поочерёдно

Пример
a = [1, 2, 3]
b = ['a', 'b', 'c']
merged = [val for pair in zip(a, b) for val in pair]
print(merged)
# [1, 'a', 2, 'b', 3, 'c']
[1, 'a', 2, 'b', 3, 'c']

Двойное for в comprehension: сначала берётся пара из zip, затем каждый элемент пары добавляется в итоговый список.

7. Поиск дубликатов в списке

Пример
items = [1, 2, 3, 2, 4, 1]
seen = set()
duplicates = []
for item in items:
    if item in seen:
        duplicates.append(item)
    else:
        seen.add(item)
print('Дубликаты:', duplicates)
# Дубликаты: [2, 1]
Дубликаты: [2, 1]

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

8. Генерация списка случайных чисел с условием

Пример
import random
random.seed(42)  # для воспроизводимости
numbers = [random.randint(1, 100) for _ in range(10) if random.randint(1, 100) % 2 == 0]
# Внимание: такой подход может дать меньше 10 чисел, так как условие проверяется на новом random

Лучше генерировать полный список и потом фильтровать:

Пример
numbers = [x for x in (random.randint(1,100) for _ in range(10)) if x % 2 == 0]
[18, 66, 42, 6]

9. Преобразование списка строк в числа с обработкой ошибок

Пример
strings = ['10', '20', 'abc', '30']
numbers = []
for s in strings:
    try:
        numbers.append(int(s))
    except ValueError:
        numbers.append(None)  # или игнорировать
print(numbers)
# [10, 20, None, 30]
[10, 20, None, 30]

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

10. Использование излишнего копирования - проблема производительности

Пример
big_list = list(range(1000000))
# Плохо: каждый раз создаётся новый список
total = 0
for i in range(len(big_list)):
    total += big_list[i]
# Хорошо: sum(big_list) или цикл по элементам

Цикл с индексами медленнее и менее читаем. Лучше использовать встроенные функции или итерацию напрямую: for x in big_list:.

Программы с массивами на Python - comments

En
программы с массивами на python (python)