10 главных операций с массивами Python для эффективной обработки данных

Пройдите тест, узнайте какой профессии подходите
Сколько вам лет
0%
До 18
От 18 до 24
От 25 до 34
От 35 до 44
От 45 до 49
От 50 до 54
Больше 55

Для кого эта статья:

  • начинающие и промежуточные программисты, желающие улучшить навыки работы с данными в Python
  • студенты и слушатели курсов по программированию, заинтересованные в практическом применении теории
  • профессиональные разработчики, которые хотят оптимизировать свои алгоритмы и повысить производительность кода

    Программисты тратят до 70% рабочего времени на операции с данными, и массивы — их главный инструмент. В Python эта концепция реализована через встроенные списки, которые превосходят массивы многих других языков своей гибкостью и мощью. Овладев всего десятью ключевыми операциями с массивами, вы сможете обрабатывать, анализировать и трансформировать данные с непревзойденной эффективностью. Готовы повысить свою продуктивность и писать код на Python, который будет работать как швейцарский часовой механизм? 🚀

Хотите не просто читать о массивах, а научиться использовать их в реальных проектах? Курс Обучение Python-разработке от Skypro предлагает углубленное изучение структур данных с практической направленностью. Вы создадите реальные проекты, где применение массивов и других структур данных становится ключевым фактором успеха. Наши выпускники решают задачи с массивами интуитивно, как профессионалы с многолетним опытом! Запишитесь сейчас и через 9 месяцев вы станете востребованным Python-разработчиком.

Списки в Python: основы и особенности массивов

В Python списки — это универсальные, изменяемые последовательности, которые выполняют роль массивов, но с гораздо большими возможностями. В отличие от классических массивов в языках вроде C++, списки Python могут содержать элементы разных типов данных одновременно и динамически менять свой размер.

Создать список в Python можно несколькими способами:

Python
Скопировать код
# Пустой список
empty_list = []

# Список с элементами разных типов
mixed_list = [1, "Python", 3.14, True]

# Список с использованием конструктора list()
converted_list = list("Python") # Создаст ['P', 'y', 't', 'h', 'o', 'n']

# Генератор списков (list comprehension)
squares = [x**2 for x in range(10)] # [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

Доступ к элементам списка осуществляется через индексацию, начиная с 0 для первого элемента:

Python
Скопировать код
languages = ["Python", "Java", "JavaScript", "C++"]
print(languages[0]) # Python
print(languages[-1]) # C++ (отрицательный индекс считается с конца)

Одной из ключевых особенностей списков Python является их мутабельность — возможность изменять содержимое после создания:

Python
Скопировать код
numbers = [10, 20, 30]
numbers[1] = 25 # Теперь список: [10, 25, 30]

Сравним характеристики списков Python с традиционными массивами и другими структурами данных:

Характеристика Списки Python Массивы в C/C++ NumPy Arrays
Типы элементов Разнородные Однородные Однородные
Размер Динамический Фиксированный Фиксированный
Эффективность памяти Средняя Высокая Очень высокая
Скорость операций Средняя Высокая Очень высокая
Гибкость использования Очень высокая Низкая Средняя

Списки Python занимают фундаментальное место в языке благодаря следующим преимуществам:

  • Встроенная поддержка без необходимости импортировать дополнительные модули
  • Богатый набор встроенных методов для работы с данными
  • Простота использования и интуитивно понятный синтаксис
  • Возможность вложенности для создания многомерных структур
  • Совместимость со всеми итеративными конструкциями языка

Дмитрий Соколов, ведущий Python-разработчик

Когда я начинал работать с большими объемами данных для сервиса анализа финансовых транзакций, я делал типичную ошибку новичка — пытался использовать стандартные списки Python для всего. Проект обрабатывал миллионы транзакций, и наша система начала тормозить на простых операциях.

После профилирования кода я обнаружил, что обычные списки Python съедали непомерное количество памяти и CPU-времени при математических операциях. Переход на специализированные структуры NumPy для числовых вычислений ускорил работу системы в 40 раз! Однако для логики приложения, где требовалась гибкость с разнородными данными, стандартные списки Python остались незаменимыми.

Этот случай научил меня важному принципу: знать сильные и слабые стороны каждого инструмента. Списки Python — отличный универсальный выбор, но для специфических задач стоит рассматривать специализированные структуры данных.

Пошаговый план для смены профессии

Добавление и удаление элементов в массивах Python

Эффективное управление содержимым массивов — ключевой навык для работы с данными в Python. Рассмотрим основные методы добавления и удаления элементов из списков. 🧩

Добавление элементов в список

Python
Скопировать код
# Добавление в конец списка (O(1) – константное время)
fruits = ["яблоко", "банан"]
fruits.append("груша")
print(fruits) # ["яблоко", "банан", "груша"]

# Вставка элемента по индексу (O(n) – линейное время)
fruits.insert(1, "апельсин")
print(fruits) # ["яблоко", "апельсин", "банан", "груша"]

# Расширение списка другим списком
more_fruits = ["киви", "ананас"]
fruits.extend(more_fruits)
print(fruits) # ["яблоко", "апельсин", "банан", "груша", "киви", "ананас"]

# Оператор + для конкатенации (создает новый список)
new_fruits = fruits + ["манго"]
print(new_fruits) # [..., "манго"]

Важно отметить разницу между append() и extend(): первый добавляет объект целиком как один элемент, второй добавляет каждый элемент итерируемого объекта по отдельности:

Python
Скопировать код
numbers = [1, 2, 3]
numbers.append([4, 5]) # [1, 2, 3, [4, 5]]
numbers = [1, 2, 3]
numbers.extend([4, 5]) # [1, 2, 3, 4, 5]

Удаление элементов из списка

Python
Скопировать код
cities = ["Москва", "Санкт-Петербург", "Казань", "Новосибирск", "Екатеринбург"]

# Удаление по значению (первое вхождение)
cities.remove("Казань")
print(cities) # ["Москва", "Санкт-Петербург", "Новосибирск", "Екатеринбург"]

# Удаление по индексу с возвращением элемента
removed_city = cities.pop(1) # "Санкт-Петербург"
print(cities) # ["Москва", "Новосибирск", "Екатеринбург"]

# Удаление последнего элемента
last_city = cities.pop() # "Екатеринбург"
print(cities) # ["Москва", "Новосибирск"]

# Удаление всех элементов
cities.clear()
print(cities) # []

# Оператор del для удаления элементов или срезов
numbers = [1, 2, 3, 4, 5]
del numbers[1] # [1, 3, 4, 5]
del numbers[1:3] # [1, 5]

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

Операция Временная сложность Использование памяти Особенности
append() O(1) Минимальное Самый быстрый способ добавления
insert() O(n) Минимальное Медленнее при больших списках
extend() O(k) Минимальное k – длина добавляемой последовательности
pop(index) O(n) Минимальное O(1) для pop() без аргументов
remove() O(n) Минимальное Требует поиска элемента
clear() O(1) Минимальное Быстрее чем del list[:]

При работе с добавлением и удалением элементов в списках Python следует учитывать несколько важных практик:

  • Используйте append() вместо += [item] для добавления одиночных элементов — это быстрее
  • Предпочитайте extend() вместо многократного append() при добавлении нескольких элементов
  • Если нужно удалить множество элементов по значению, эффективнее использовать фильтрацию с созданием нового списка
  • При частой вставке и удалении элементов в начале списка рассмотрите использование collections.deque
  • Для массивых операций удаления по условию используйте list comprehension вместо циклов с remove()
Python
Скопировать код
# Неэффективно
numbers = [1, 2, 3, 4, 5, 6]
for num in numbers[:]: # Копия для итерации
if num % 2 == 0:
numbers.remove(num)

# Эффективно
numbers = [1, 2, 3, 4, 5, 6]
numbers = [num for num in numbers if num % 2 != 0]

Сортировка, поиск и фильтрация в списках Python

Сортировка, поиск и фильтрация — три кита обработки данных, позволяющие структурировать информацию и извлекать необходимые элементы из массивов. Python предлагает мощные инструменты для этих операций. 🔍

Сортировка списков

Python предоставляет два основных способа сортировки списков: метод sort(), который изменяет исходный список, и функция sorted(), создающая новый отсортированный список.

Python
Скопировать код
# Базовая сортировка (изменяет исходный список)
numbers = [3, 1, 4, 1, 5, 9, 2]
numbers.sort()
print(numbers) # [1, 1, 2, 3, 4, 5, 9]

# Сортировка по убыванию
numbers.sort(reverse=True)
print(numbers) # [9, 5, 4, 3, 2, 1, 1]

# Сортировка без изменения исходного списка
original = [3, 1, 4, 1, 5]
sorted_list = sorted(original)
print(original) # [3, 1, 4, 1, 5]
print(sorted_list) # [1, 1, 3, 4, 5]

# Сортировка строк (лексикографическая)
words = ["яблоко", "Банан", "апельсин"]
words.sort() # ["Банан", "апельсин", "яблоко"] (сначала заглавные буквы)
words.sort(key=str.lower) # ["апельсин", "Банан", "яблоко"] (игнорирует регистр)

Для более сложных случаев сортировки можно использовать параметр key, принимающий функцию, которая применяется к каждому элементу перед сравнением:

Python
Скопировать код
# Сортировка по длине строк
words = ["Python", "JavaScript", "C++", "Rust", "Go"]
words.sort(key=len)
print(words) # ["Go", "C++", "Rust", "Python", "JavaScript"]

# Сортировка словарей по значению ключа
students = [
{"name": "Анна", "grade": 95},
{"name": "Борис", "grade": 88},
{"name": "Вера", "grade": 92}
]
students.sort(key=lambda student: student["grade"], reverse=True)
print(students) # [{"name": "Анна", "grade": 95}, {"name": "Вера", "grade": 92}, ...]

# Сортировка по нескольким критериям с operator.itemgetter
from operator import itemgetter
employees = [
("Иванов", "Инженер", 85000),
("Петров", "Инженер", 75000),
("Сидоров", "Менеджер", 95000)
]
# Сначала по должности, потом по зарплате (убывание)
employees.sort(key=itemgetter(1, 2), reverse=True)

Поиск элементов в списке

Python предлагает несколько методов для поиска элементов в списке:

Python
Скопировать код
fruits = ["яблоко", "банан", "груша", "яблоко", "апельсин"]

# Проверка наличия элемента
if "банан" in fruits:
print("Банан есть в списке")

# Поиск индекса первого вхождения
apple_index = fruits.index("яблоко") # 0
# Поиск в подмножестве списка
apple_index = fruits.index("яблоко", 1) # 3 (поиск начиная с индекса 1)

# Подсчёт вхождений элемента
apple_count = fruits.count("яблоко") # 2

# Поиск максимального/минимального элемента
max_fruit = max(fruits) # "яблоко" (лексикографически)
min_fruit = min(fruits) # "апельсин" (лексикографически)

# Поиск с использованием генератора списков
found_fruits = [f for f in fruits if f.startswith("а")] # ["яблоко", "апельсин", "яблоко"]

# Поиск с использованием filter
found_fruits = list(filter(lambda f: len(f) > 5, fruits)) # ["яблоко", "яблоко", "апельсин"]

Для поиска по сложным условиям можно использовать встроенные функции all() и any():

Python
Скопировать код
numbers = [1, 2, 3, 4, 5]

# Проверяем, все ли элементы больше нуля
all_positive = all(num > 0 for num in numbers) # True

# Проверяем, есть ли в списке четные числа
has_even = any(num % 2 == 0 for num in numbers) # True

Фильтрация списков

Фильтрация — это процесс создания нового списка, содержащего только элементы, удовлетворяющие определенным условиям. Это можно делать различными способами:

Python
Скопировать код
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

# Фильтрация с помощью генератора списков (предпочтительный способ)
even_numbers = [num for num in numbers if num % 2 == 0]
print(even_numbers) # [2, 4, 6, 8, 10]

# Фильтрация с помощью функции filter()
odd_numbers = list(filter(lambda x: x % 2 != 0, numbers))
print(odd_numbers) # [1, 3, 5, 7, 9]

# Комбинирование фильтрации и трансформации
squared_evens = [num**2 for num in numbers if num % 2 == 0]
print(squared_evens) # [4, 16, 36, 64, 100]

# Фильтрация с использованием нескольких условий
filtered = [num for num in numbers if num % 2 == 0 and num > 5]
print(filtered) # [6, 8, 10]

Александр Новиков, Python-архитектор

Однажды наша команда столкнулась с неожиданной проблемой производительности в аналитическом сервисе. Система обрабатывала данные пользователей, и один из модулей внезапно начал тормозить. Профилирование показало, что проблема в коде, который многократно фильтровал большие списки пользователей.

Код выглядел примерно так:

Python
Скопировать код
filtered_users = []
for user in users:
if user['age'] > 30 and user['subscription'] == 'premium':
filtered_users.append(user)

Это работало нормально при небольшом количестве пользователей, но стало "бутылочным горлышком" при масштабировании. Я предложил заменить код на генератор списков:

Python
Скопировать код
filtered_users = [user for user in users 
if user['age'] > 30 and user['subscription'] == 'premium']

К удивлению команды, это простое изменение ускорило обработку на 40%. Но настоящий прорыв произошёл, когда мы заменили фильтрацию объектов на работу с индексами и предварительно отсортированными данными. Производительность выросла в 8 раз!

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

Трансформация массивов: срезы и объединение списков

Трансформация массивов — это мощный инструмент для преобразования и комбинирования данных. В Python срезы и операции объединения списков позволяют элегантно манипулировать данными без громоздкого кода. 🔄

Работа со срезами (slicing)

Срезы — один из самых мощных и выразительных инструментов Python для работы с последовательностями. Синтаксис срезов: список[начало:конец:шаг].

Python
Скопировать код
sequence = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

# Базовые срезы
first_three = sequence[:3] # [0, 1, 2]
middle_items = sequence[3:7] # [3, 4, 5, 6]
last_three = sequence[-3:] # [7, 8, 9]

# Срезы с шагом
even_numbers = sequence[::2] # [0, 2, 4, 6, 8]
odd_numbers = sequence[1::2] # [1, 3, 5, 7, 9]

# Отрицательный шаг (обратный порядок)
reversed_seq = sequence[::-1] # [9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
reverse_evens = sequence[::-2] # [9, 7, 5, 3, 1]

# Комбинирование начала/конца с шагом
part_reversed = sequence[7:2:-1] # [7, 6, 5, 4, 3]

Срезы можно использовать не только для извлечения частей списка, но и для замены группы элементов:

Python
Скопировать код
original = [1, 2, 3, 4, 5]

# Замена подпоследовательности
original[1:4] = [20, 30] # [1, 20, 30, 5]

# Вставка элементов без удаления
original[2:2] = [25, 26] # [1, 20, 25, 26, 30, 5]

# Удаление подпоследовательности
original[2:5] = [] # [1, 20, 5]

Объединение списков

Python предлагает несколько способов объединения списков, каждый со своими особенностями:

Python
Скопировать код
list1 = [1, 2, 3]
list2 = [4, 5, 6]
list3 = [7, 8, 9]

# Конкатенация с оператором +
combined = list1 + list2 # [1, 2, 3, 4, 5, 6]

# Использование метода extend()
result = list1.copy() # Создаем копию, чтобы не изменять исходный список
result.extend(list2) # [1, 2, 3, 4, 5, 6]

# Объединение нескольких списков
mega_list = list1 + list2 + list3 # [1, 2, 3, 4, 5, 6, 7, 8, 9]

# Метод sum() с пустым списком в качестве начального значения
combined = sum([list1, list2, list3], []) # [1, 2, 3, 4, 5, 6, 7, 8, 9]

# Использование распаковки (unpacking) с Python 3.5+
combined = [*list1, *list2, *list3] # [1, 2, 3, 4, 5, 6, 7, 8, 9]

# Метод chain() из модуля itertools
from itertools import chain
combined = list(chain(list1, list2, list3)) # [1, 2, 3, 4, 5, 6, 7, 8, 9]

# Селективное объединение с генераторами списков
selective = [x for x in list1 if x % 2 == 0] + [y for y in list2 if y % 2 == 1]
# [2, 5]

Сравнение эффективности различных методов объединения списков:

Метод объединения Скорость Использование памяти Лучше всего подходит для
Оператор + Средняя Создает новый список Простое объединение 2-3 списков
extend() Высокая Модифицирует существующий список Когда можно изменять исходный список
sum(lists, []) Низкая Создает промежуточные списки Компактный код, небольшие списки
Распаковка (*list) Высокая Создает новый список Современный Python-код (3.5+)
itertools.chain() Очень высокая Минимальное при итерации Большие списки, ленивая оценка

Продвинутые техники трансформации

Комбинируя срезы и объединение, можно реализовать мощные техники трансформации списков:

Python
Скопировать код
data = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

# Чередование элементов
def interleave(list1, list2):
result = []
for i in range(max(len(list1), len(list2))):
if i < len(list1):
result.append(list1[i])
if i < len(list2):
result.append(list2[i])
return result

interleaved = interleave([1, 3, 5], [2, 4, 6]) # [1, 2, 3, 4, 5, 6]

# Разделение списка на чанки определенного размера
def chunk_list(lst, chunk_size):
return [lst[i:i + chunk_size] for i in range(0, len(lst), chunk_size)]

chunks = chunk_list(data, 3) # [[1, 2, 3], [4, 5, 6], [7, 8, 9], [10]]

# Вращение списка (циклический сдвиг)
def rotate(lst, k):
k = k % len(lst) # Обработка случая, когда k больше длины списка
return lst[-k:] + lst[:-k] if k else lst.copy()

rotated = rotate(data, 3) # [8, 9, 10, 1, 2, 3, 4, 5, 6, 7]

Дополнительные советы по работе с трансформацией массивов:

  • Избегайте + в циклах для построения списков — это создает новый список при каждой итерации
  • При работе с большими списками используйте itertools.chain для ленивого объединения
  • Помните, что срезы создают копии списков, что может быть затратно для очень больших массивов
  • Для сложных манипуляций с матрицами рассмотрите NumPy, который оптимизирован для таких операций
  • При изменении списков через срезы учитывайте, что длина вставляемой последовательности может отличаться от длины заменяемого среза

Многомерные массивы и продвинутые операции в Python

Многомерные массивы расширяют возможности обработки данных, позволяя моделировать сложные структуры, такие как матрицы, тензоры и многомерные таблицы. Python предлагает несколько подходов к работе с многомерными данными. 📊

Создание и использование многомерных массивов

В стандартном Python многомерные массивы реализуются как списки списков:

Python
Скопировать код
# Создание двумерного массива (матрицы 3x3)
matrix = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
]

# Доступ к элементам
element = matrix[1][2] # 6 (элемент на 2-й строке, 3-м столбце)

# Изменение элементов
matrix[0][1] = 20
# Теперь matrix = [[1, 20, 3], [4, 5, 6], [7, 8, 9]]

# Создание трехмерного массива (куб 2x2x2)
cube = [
[[1, 2], [3, 4]],
[[5, 6], [7, 8]]
]

# Доступ к элементу трехмерного массива
element = cube[1][0][1] # 6

Для более эффективной работы с многомерными числовыми массивами рекомендуется использовать библиотеку NumPy:

Python
Скопировать код
import numpy as np

# Создание двумерного массива
np_matrix = np.array([
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
])

# Доступ и изменение элементов так же интуитивны
element = np_matrix[1, 2] # 6
np_matrix[0, 1] = 20

# Операции со всем массивом
np_matrix = np_matrix * 2 # Умножает все элементы на 2

# Срезы работают по всем измерениям
sub_matrix = np_matrix[:2, 1:] # Первые 2 строки, все столбцы кроме первого

Общие операции с многомерными массивами

Работа со стандартными списками Python для многомерных структур:

Python
Скопировать код
# Обход элементов матрицы
matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]

for i in range(len(matrix)):
for j in range(len(matrix[i])):
print(f"matrix[{i}][{j}] = {matrix[i][j]}")

# Альтернативный обход с перечислением строк
for row in matrix:
for element in row:
print(element, end=' ')
print() # Переход на новую строку после каждой строки матрицы

# Создание матрицы заданного размера (3x4)
rows, cols = 3, 4
matrix = [[0 for _ in range(cols)] for _ in range(rows)]

# Транспонирование матрицы (без NumPy)
transposed = [[row[i] for row in matrix] for i in range(len(matrix[0]))]

# Сложение матриц
matrix_a = [[1, 2], [3, 4]]
matrix_b = [[5, 6], [7, 8]]
result = [[matrix_a[i][j] + matrix_b[i][j] for j in range(len(matrix_a[0]))]
for i in range(len(matrix_a))]

С библиотекой NumPy те же операции выполняются гораздо проще и эффективнее:

Python
Скопировать код
import numpy as np

# Создание матрицы заданного размера (3x4)
matrix = np.zeros((3, 4)) # Матрица из нулей
matrix = np.ones((3, 4)) # Матрица из единиц
matrix = np.full((3, 4), 7) # Матрица заполненная 7

# Транспонирование
transposed = matrix.T
# или
transposed = np.transpose(matrix)

# Матричные операции
matrix_a = np.array([[1, 2], [3, 4]])
matrix_b = np.array([[5, 6], [7, 8]])

# Сложение
result = matrix_a + matrix_b
# или
result = np.add(matrix_a, matrix_b)

# Умножение матриц
product = np.dot(matrix_a, matrix_b)
# или в современном синтаксисе
product = matrix_a @ matrix_b

# Вычисление детерминанта
determinant = np.linalg.det(matrix_a)

# Нахождение обратной матрицы
inverse = np.linalg.inv(matrix_a)

# Решение системы линейных уравнений Ax = b
b = np.array([1, 2])
x = np.linalg.solve(matrix_a, b)

Продвинутые приемы работы с массивами

Рассмотрим несколько продвинутых техник, которые делают работу с массивами в Python еще более мощной:

  • Широковещательные операции (Broadcasting) в NumPy позволяют выполнять операции с массивами разной формы
  • Векторизация заменяет циклы операциями над целыми массивами, что значительно повышает производительность
  • Маскирование позволяет выбирать и модифицировать элементы по условиям
  • Применение функций ко всем элементам массива без явных циклов
Python
Скопировать код
import numpy as np

# Broadcasting: операции между массивами разной формы
array_2d = np.array([[1, 2, 3], [4, 5, 6]])
array_1d = np.array([10, 20, 30])

# Прибавление вектора к каждой строке матрицы
result = array_2d + array_1d # [[11, 22, 33], [14, 25, 36]]

# Маскирование: выбор элементов по условию
mask = array_2d > 3
filtered = array_2d[mask] # [4, 5, 6]

# Изменение элементов по условию
array_2d[array_2d % 2 == 0] = 0 # Заменяем четные числа нулями
# Теперь array_2d = [[1, 0, 3], [0, 5, 0]]

# Применение функций к массиву
squared = np.square(array_2d) # Возводит каждый элемент в квадрат
logs = np.log(np.abs(array_2d) + 1) # Логарифм от модуля каждого элемента + 1

# Статистические функции по осям
column_means = np.mean(array_2d, axis=0) # Среднее по столбцам
row_sums = np.sum(array_2d, axis=1) # Суммы по строкам

Некоторые практические задачи, где многомерные массивы особенно полезны:

  • Обработка изображений (изображение — это трехмерный массив с каналами RGB)
  • Машинное обучение и нейронные сети (веса, активации, градиенты)
  • Научные вычисления и симуляции физических процессов
  • Финансовое моделирование многомерных временных рядов
  • Обработка естественного языка (эмбеддинги слов и предложений)
Python
Скопировать код
# Пример: конволюция (свертка) — базовая операция в обработке изображений
def convolve2d(image, kernel):
# Предполагаем, что image и kernel – это numpy массивы
output = np.zeros_like(image)
padded = np.pad(image, pad_width=1, mode='constant')

for i in range(image.shape[0]):
for j in range(image.shape[1]):
output[i, j] = np.sum(padded[i:i+3, j:j+3] * kernel)

return output

# Простой фильтр выделения краев
edge_kernel = np.array([[-1, -1, -1],
[-1, 8, -1],
[-1, -1, -1]])

# Применение фильтра к изображению (в реальности используйте scipy.signal.convolve2d)

Массивы в Python — это универсальный инструмент, который может быть настолько же простым или сложным, насколько того требует ваша задача. Мы рассмотрели основные операции от создания и модификации до продвинутых многомерных трансформаций, и вы теперь обладаете знаниями для эффективной работы с данными в различных сценариях. Помните: выбор правильной структуры и операций может сделать ваш код не только более читаемым, но и на порядок более производительным. Не бойтесь экспериментировать, комбинируя различные техники — именно так рождаются элегантные и мощные решения в мире Python-разработки.

Читайте также

Проверь как ты усвоил материалы статьи
Пройди тест и узнай насколько ты лучше других читателей
Какой метод добавляет элемент в конец списка?
1 / 5

Загрузка...