Python
Массивы в Python: чем список отличается от массива
В разговорной речи массивом в Python часто называют обычный список. Но технически list и массив из модуля array — разные структуры. Новичку почти всегда стоит начинать со списка
Разберем разницу без путаницы: в обычном Python под массивом часто имеют в виду список, но для числовых данных есть array. Важно понять, когда хватает list, а когда нужен более строгий контейнер
По этой теме полезно отдельно посмотреть Составьте еженедельное расписание занятий, чтобы расширить контекст и сравнить подходы
По этой теме полезно отдельно посмотреть Аннотации типов для декораторов в Python, чтобы расширить контекст и сравнить подходы
Базовый пример
Обычный список может хранить разные типы:
items = [1, 'python', True]
print(items)
Массив array хранит значения одного типа:
from array import array
numbers = array('i', [1, 2, 3])
print(numbers)
Разбор по шагам
list подходит почти всегда: в нем можно хранить строки, числа, словари, объекты и смешанные данные. Он гибкий, хорошо работает с циклами, срезами, сортировкой и добавлением элементов
array из стандартного модуля нужен реже. Он хранит значения одного типа и ближе к числовому контейнеру. Новичку важно не пытаться заменить все списки массивами: сначала выбирайте list, а к array переходите, когда точно нужна компактная последовательность однотипных чисел
Практические варианты
Когда нужен list
- учебные задачи
- строки, числа, словари вместе
- список задач или товаров
- быстрый перебор и фильтрация
Когда смотреть в сторону array
- много чисел одного типа
- важно компактнее хранить данные
- нужно явно ограничить тип элементов
Частые ошибки
Частая ошибка — думать, что для любой задачи нужен настоящий массив. В большинстве учебных и прикладных задач Python-список проще, понятнее и достаточен
Как проверить результат
- запустить код на обычном примере
- проверить пустой список
- проверить список из одного элемента
- проверить повторы
- объяснить, меняется исходный список или создается новый
- вынести действие в функцию, если оно повторяется
Сравнение на практике
Список подходит для смешанных данных:
user = ["Анна", 25, True]
print(user)
Но если все элементы одного смысла, лучше не смешивать типы:
prices = [100, 250, 300]
print(sum(prices))
Массив из array строже:
from array import array
numbers = array("i", [1, 2, 3])
numbers.append(4)
print(numbers)
Если попытаться добавить значение неподходящего типа, код сломается. Для обучения это может быть лишним ограничением, но для больших числовых наборов такая строгость бывает полезна
Что выбрать новичку
Начинайте с list. Он проще, чаще встречается в уроках и подходит для большинства задач: фильтрация, сортировка, поиск, перебор, работа со строками и словарями. К array переходите, когда понимаете, зачем нужен один строгий тип элементов
Практика на закрепление
Чтобы выбрать между списком и массивом, задайте вопрос: данные разнородные или однотипные. Для карточки пользователя удобнее словарь или список словарей. Для большого набора чисел может подойти более строгая структура
users = [
{"name": "Анна", "age": 25},
{"name": "Илья", "age": 19},
]
adult_users = []
for user in users:
if user["age"] >= 18:
adult_users.append(user)
print(adult_users)
Здесь обычный список подходит идеально: он хранит словари, его легко фильтровать и читать. Массив array в такой задаче не поможет, потому что данные не являются простым набором чисел одного типа
Запомните рабочее правило: если вы учитесь Python или пишете обычный скрипт, берите list. Если уперлись в объем числовых данных, производительность или требования библиотеки, тогда изучайте специализированные варианты
Практика: выберите контейнер под задачу
Представьте две задачи. В первой нужно хранить товары с названием и ценой. Во второй — много числовых измерений температуры. Для товаров удобнее обычный список словарей, для однотипных чисел можно взять array
products = [
{"title": "Книга", "price": 900},
{"title": "Клавиатура", "price": 2500},
]
for product in products:
print(product["title"], product["price"])
from array import array
temperatures = array("f", [21.5, 22.0, 20.8])
temperatures.append(23.1)
print(sum(temperatures) / len(temperatures))
Если данные разные по смыслу и структуре, берите list. Если это длинная последовательность однотипных чисел и вы понимаете, зачем нужен строгий тип, можно использовать array
Как не ошибиться с выбором
Если вы только начинаете писать на Python, почти всегда начинайте со списка. Он проще, понятнее и лучше подходит для смешанных данных. В списке можно держать строки, числа, словари, объекты и даже другие списки. Поэтому для задач вроде списка дел, каталога товаров или результатов парсинга list будет нормальным выбором
array стоит брать, когда все элементы одного числового типа и вам действительно важна более строгая структура. Для большинства учебных задач это не требуется. Если сомневаетесь, напишите решение на list, а потом отдельно проверьте, есть ли реальная причина переходить на array
Когда список лучше массива
Обычный список лучше подходит для данных, которые меняются по структуре. Например, сегодня у задачи есть только название, завтра добавится срок, потом статус и исполнитель. В list можно хранить словари с такими полями без лишней подготовки
tasks = []
tasks.append({"title": "проверить код", "status": "new"})
tasks.append({"title": "добавить тест", "status": "done"})
active = [task for task in tasks if task["status"] == "new"]
print(active)
Для такого сценария array только усложнит задачу. Он не предназначен для словарей, строковых полей и смешанных структур
Итоговая практика: два варианта хранения данных
Закрепите разницу на одном примере. Список подойдет для задач, где элементы имеют разные поля. array подойдет для плотной последовательности однотипных чисел
from array import array
tasks = [
{"title": "написать код", "done": False},
{"title": "проверить", "done": True},
]
durations = array("i", [25, 30, 15])
print(tasks[0]["title"])
print(sum(durations))
Если вы не можете назвать причину для array, выбирайте list. Это нормальный выбор для большинства учебных и прикладных задач на Python
Практический ориентир простой: если вы описываете предметы, действия, настройки или записи с несколькими полями, выбирайте список. Если вы храните длинный ряд однотипных чисел и готовы работать с ограничениями типа, можно рассмотреть array. В остальных случаях список будет понятнее и для вас, и для человека, который потом прочитает код