Типы массивов и их применение в языке Python
Массивы и их типы в Python
Наиболее универсальный тип данных для хранения упорядоченных наборов элементов - list (список). Он поддерживает изменение элементов, добавление, удаление, срезы, итерации. Основное преимущество - гибкость и встроенные методы. Однако для специализированных задач (экономия памяти, работа с уникальными значениями, быстрый поиск по ключу) применяются другие типы, описанные ниже.
numbers = [1, 2, 3, 4, 5]
numbers.append(6)
numbers[0] = 10
print(numbers) # [10, 2, 3, 4, 5, 6]Python массив типов (массив типов в python)
Как хранить упорядоченные, но неизменяемые данные?
Используется tuple (кортеж). Кортеж быстрее списка, может быть ключом словаря. Элементы не изменяются после создания.
point = (10, 20)
coord = point[0] # 10
# point[0] = 30 # Ошибка TypeErrorPython массивы типы данных (массивы и типы данных в python)
Как хранить только уникальные элементы без порядка?
Применяется set (множество). Операции проверки вхождения, объединения, пересечения выполняются за O(1) в среднем.
unique = {1, 2, 3, 2, 1}
print(unique) # {1, 2, 3}
print(1 in unique) # True
Как создать неизменяемое множество для использования в качестве ключа словаря?
Тип frozenset - неизменяемая версия set. Он хешируемый, поэтому может быть ключом dict или элементом другого set.
fs = frozenset([1, 2, 3])
d = {fs: "value"}
print(d[fs]) # value
Как хранить пары ключ-значение для быстрого доступа?
Словарь dict - ассоциативный массив. Ключи должны быть неизменяемыми (строки, числа, кортежи, frozenset). Доступ по ключу за O(1).
ages = {"Alice": 30, "Bob": 25}
print(ages["Alice"]) # 30
ages["Charlie"] = 35
Как хранить однотипные числовые данные компактно?
Модуль array предоставляет массивы фиксированного типа (typecode). Память экономится по сравнению со списком, но операции медленнее, чем в numpy.
from array import array
arr = array('d', [1.5, 2.7, 3.14]) # 'd' - double
arr.append(4.0)
print(arr) # array('d', [1.5, 2.7, 3.14, 4.0])
Как эффективно работать с многомерными числовыми массивами?
Библиотека NumPy - стандарт для научных вычислений. Поддерживает broadcasting, векторизованные операции, работу с большими данными.
import numpy as np
matrix = np.array([[1, 2], [3, 4]])
print(matrix * 2)
# [[2 4]
# [6 8]]
Расширенные примеры работы с массивами
Ниже приведены более сложные и нестандартные примеры использования различных типов массивов в Python.
Генерация списка с условием (list comprehension)
squares = [x**2 for x in range(10) if x % 2 == 0]
print(squares) # [0, 4, 16, 36, 64]
[0, 4, 16, 36, 64]
Использование collections.defaultdict для группировки
from collections import defaultdict
words = ["apple", "banana", "apricot", "blueberry"]
groups = defaultdict(list)
for w in words:
groups[w[0]].append(w)
print(dict(groups)) # {'a': ['apple', 'apricot'], 'b': ['banana', 'blueberry']}
{'a': ['apple', 'apricot'], 'b': ['banana', 'blueberry']}
Создание frozenset из строки и использование как ключа словаря
chars = frozenset("hello")
d = {chars: "letters"}
print(d[frozenset("oleh")]) # True, так как frozenset игнорирует порядок
letters
Массивы array с типом 'I' (unsigned int) и побайтовой записью
from array import array
arr = array('I', [100, 200, 300])
arr_bytes = arr.tobytes()
print(arr_bytes) # b'd\x00\x00\x00\xc8\x00\x00\x00,\x01\x00\x00'
b'd\x00\x00\x00\xc8\x00\x00\x00,\x01\x00\x00'
NumPy: broadcasting и векторизованные операции
import numpy as np
a = np.array([[1, 2], [3, 4]])
b = np.array([10, 20])
result = a + b # broadcasting: b превращается в [[10,20],[10,20]]
print(result)
[[11 22] [13 24]]
Применение dict.get() с генерацией значения по умолчанию
from collections import defaultdict
# альтернатива defaultdict с обычным dict
counter = {}
for char in "hello world":
counter[char] = counter.get(char, 0) + 1
print(counter) # {'h': 1, 'e': 1, 'l': 3, 'o': 2, ' ': 1, 'w': 1, 'r': 1, 'd': 1}
{'h': 1, 'e': 1, 'l': 3, 'o': 2, ' ': 1, 'w': 1, 'r': 1, 'd': 1}
Создание кортежа из генератора и распаковка
tup = tuple(x for x in range(5) if x % 2 == 1)
a, b = tup[0], tup[1] # a=1, b=3
print(tup) # (1, 3)
(1, 3)
Множество set с операциями разности и симметрической разности
a = {1, 2, 3, 4}
b = {3, 4, 5, 6}
print(a - b) # {1, 2}
print(a ^ b) # {1, 2, 5, 6}
{1, 2}
{1, 2, 5, 6}