Массивы — это структуры данных, которые позволяют хранить коллекции элементов одного и того же типа в памяти.
На первый взгляд, они очень похожи на списки в Python. Однако ключевое различие заключается в том, что массивы более ограничены по типам данных, которые они могут содержать. Так, например, вы не можете иметь массив, в котором одновременно хранятся и числа, и строки.
Списки в Python гибки и могут содержать элементы различных типов, что делает их идеальным инструментом для многих задач. Но эта гибкость приходит с определенной ценой в плане эффективности использования памяти и скорости доступа к данным.
Модуль array в Python предоставляет возможность создавать массивы различных примитивных типов данных, таких как целые числа, вещественные числа и другие. Поскольку массивы в этом модуле хранят элементы одного типа, они обычно используют память более эффективно, чем списки, и предоставляют быстрый доступ к своим элементам.
Основное назначение модуля array — предоставление эффективного механизма для хранения базовых данных, таких как бинарные данные или большие массивы чисел, когда стандартные списки не являются наилучшим выбором из-за требований к производительности или памяти.
Типовые коды типа (typecode)
В модуле array элементы массива должны быть одного и того же типа. Чтобы определить этот тип, при создании массива используется аргумент typecode
. Вот некоторые из наиболее часто используемых typecode
:
Создание массива с помощью функции array.array()
Для создания массива используется функция array()
из модуля array. Эта функция принимает два аргумента: typecode
(определенный выше) и начальное значение (необязательный).
Пример:
import array
arr = array.array('i', [1, 2, 3, 4, 5])
print(arr) # array('i', [1, 2, 3, 4, 5])
Примеры инициализации массивов разных типов
import array
arr_signed_byte = array.array('b', [10, -20, 30, -40])
print(arr_signed_byte) # array('b', [10, -20, 30, -40])
import array
arr_unsigned_byte = array.array('B', [10, 20, 30, 40])
print(arr_unsigned_byte) # array('B', [10, 20, 30, 40])
import array
arr_float = array.array('f', [1.5, 2.5, 3.5])
print(arr_float) # array('f', [1.5, 2.5, 3.5])
import array
arr_double = array.array('d', [1.5, 2.5, 3.5])
print(arr_double) # array('d', [1.5, 2.5, 3.5])
Массивы, созданные с помощью модуля array, поддерживают различные операции, подобные тем, которые применимы к стандартным спискам в Python. Однако стоит помнить, что все элементы массива должны соответствовать заданному при создании typecode
.
append()
- Метод используется для добавления одного элемента в конец массива.import array
arr = array.array('i', [1, 2, 3])
arr.append(4)
print(arr) # array('i', [1, 2, 3, 4])
extend()
- Метод позволяет добавлять последовательность элементов (например, другой массив или список) в конец массива.import array
arr = array.array('i', [1, 2, 3, 4])
arr.extend([5, 6, 7])
print(arr) # array('i', [1, 2, 3, 4, 5, 6, 7])
pop()
- Метод удаляет элемент по указанному индексу и возвращает его. Если индекс не указан, удаляется последний элемент.import array
arr = array.array('i', [1, 2, 3, 4, 5, 6, 7])
element = arr.pop(2)
print(element) # 3
print(arr) # array('i', [1, 2, 4, 5, 6, 7])
remove()
- Метод удаляет первое вхождение указанного элемента. Если такого элемента нет, генерируется ValueError
.import array
arr = array.array('i', [1, 2, 4, 5, 6, 7])
arr.remove(4)
print(arr) # array('i', [1, 2, 5, 6, 7])
import array
arr = array.array('i', [1, 2, 5, 6, 7])
arr[1] = 10
print(arr) # array('i', [1, 10, 5, 6, 7])
index()
- Метод возвращает индекс первого вхождения указанного элемента.import array
arr = array.array('i', [1, 10, 5, 6, 7])
idx = arr.index(5)
print(idx) # 2
count()
- Метод возвращает количество вхождений указанного элемента.import array
arr = array.array('i', [1, 10, 5, 6, 7])
arr.extend([5, 5])
print(arr.count(5)) # 3
reverse()
- Метод изменяет порядок элементов на обратный.import array
arr = array.array('i', [1, 2, 3, 4, 5])
arr.reverse()
print(arr) # array('i', [5, 4, 3, 2, 1])
Массивы и списки являются двумя популярными структурами данных в Python, и иногда возникает необходимость в их взаимном преобразовании. Давайте рассмотрим основные методы конвертации между этими типами.
Из массива в список:
Поскольку массивы модуля array поддерживают многие из тех же методов, что и списки, преобразование массива в список довольно прямолинейно:
import array
arr = array.array('i', [1, 2, 3, 4, 5])
lst = list(arr)
В этом примере мы создаем массив целых чисел и затем преобразуем его в список с помощью функции list()
.
Из списка в массив:
Подобно предыдущему методу, преобразование списка в массив также просто:
import array
lst = [1, 2, 3, 4, 5]
arr = array.array('i', lst)
Здесь мы сначала определяем список, а затем передаем его как второй аргумент конструктору array.array()
для создания массива.
Использование метода tostring()
и fromstring()
для работы с бинарными данными
Метод tostring()
предоставляет возможность конвертировать содержимое массива в бинарную строку:
import array
arr = array.array('i', [1, 2, 3, 4, 5])
bin_data = arr.tobytes()
В этом примере bin_data
будет содержать бинарное представление элементов массива.
Этот метод fromstring()
(или frombytes()
в новых версиях Python) позволяет заполнить массив данными из бинарной строки:
import array
arr = array.array('i')
arr.frombytes(bin_data)
После выполнения этого кода массив arr будет содержать элементы [1, 2, 3, 4, 5], полученные из бинарных данных bin_data
.
Примечание: В новых версиях Python метод tostring()
был переименован в tobytes()
, а fromstring()
в frombytes()
для лучшего отражения их функциональности.
Многомерные массивы — это массивы, содержащие другие массивы в качестве своих элементов. Наиболее распространенным примером многомерного массива является двумерный массив, который можно представить в виде матрицы. Однако можно иметь и трехмерные массивы (кубы данных), четырехмерные и так далее.
Основное отличие многомерных массивов от одномерных заключается в том, что у них есть несколько измерений или "осей". Например, в двумерном массиве две оси: строки и столбцы.
Примеры работы с многомерными массивами
Модуль array в Python не поддерживает многомерные массивы напрямую. Однако можно имитировать их, создав список массивов:
import array
# Создание 2x3 двумерного массива (матрицы)
matrix = [
array.array('i', [1, 2, 3]),
array.array('i', [4, 5, 6])
]
print(matrix[0][2]) # Выводит 3, потому что это третий элемент первой строки
print(matrix[1][0]) # Выводит 4, потому что это первый элемент второй строки
Ограничения модуля array в работе с многомерными массивами:
Массивы, созданные с использованием модуля array в Python, можно легко сохранять в файлы и загружать из них. Это позволяет эффективно хранить большие объемы данных в бинарном формате, что экономит место на диске и ускоряет операции чтения и записи.
Массивы можно сохранять непосредственно в файлы с помощью метода tofile()
. Этот метод записывает все элементы массива в файл в бинарном формате.
import array
# Создаем массив типа 'i' (целые числа)
arr = array.array('i', [1, 2, 3, 4, 5])
# Сохраняем массив в файл
with open('data.bin', 'wb') as f:
arr.tofile(f)
Для загрузки данных из файла в массив используется метод fromfile()
. Он читает данные из файла и добавляет их к массиву.
import array
# Создаем пустой массив типа 'i'
arr = array.array('i')
# Загружаем данные из файла в массив
with open('data.bin', 'rb') as f:
arr.fromfile(f, 5) # указываем количество элементов, которое нужно прочитать
print(arr) # Выводит array('i', [1, 2, 3, 4, 5])
Примечание: При использовании fromfile()
, вам необходимо знать, сколько элементов вы хотите прочитать, так как метод не знает заранее размер массива.
Модуль array в Python предоставляет средства для создания массивов с элементами одного типа, что может быть особенно полезно, когда вам нужно экономить память или оптимизировать определенные операции с данными. Хотя он не предоставляет такого обширного набора функций, как некоторые другие библиотеки (например, NumPy), для простых задач он является отличным инструментом.
С использованием array вы можете не только производить стандартные операции над массивами, такие как добавление, удаление и модификация элементов, но и выполнять файловые операции, эффективно сохраняя и загружая данные. Эти возможности делают модуль array ценным инструментом в арсенале каждого разработчика Python.
Содержание: