Top.Mail.Ru

Массивы в Python

Массивы в Python

В Python нет встроенного типа «массив», но вместо него можно использовать встроенный тип «список» (list). Также при использовании библиотеки NumPy можно создавать объект типа «массив» (Ndarray). Далее о каждом из этих двух вариантов подробнее.

Списки (list)

Список представляет собой тип, который может хранить любое количество элементов разных типов. Создать список в Python можно несколькими способами:

Создание

  • Создание пустого списка:
names = []
names = list()
  • Создание списка с элементами:
names = ['Иван', 'Женя', 'Ольга']
  • Создание списка на основе другого списка:
names = ['Иван', 'Женя', 'Ольга']
new_names = list(names)
  • Создание списка повторением какого-либо элемента или другого списка:
names = ['Иван', 'Женя', 'Ольга']
new_names = names * 2
  • Создание списка с помощью конструкции range():
numbers = list(range(10))

Функция range(10) возвращает числа от 0 до 9, на основе которых создаётся новый список.

Обращение к элементу

Обращение к элементу списка производится по индексу элемента:

names[0]

Индексы элементов начинаются с нулевого, то есть первый элемент списка имеет индекс «0», а второй — «1».

Обход элементов

Элементы списка можно обходить циклами for и while:

for name in names:
    print(name)

Сравнение

Списки можно сравнивать между собой. Для того, чтобы два списка считались равными, они должны иметь одинаковый состав. К примеру, следующие два списка будут равны, не смотря на разные способы их создания:

list1 = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
list2 = list(range(10))

Размерность

Список в Python может быть как одномерным, так и многомерным. Выше были приведены примеры одномерных списков. Чтобы список был многомерным, например, двухмерным, каждый элемент списка должен представлять собой другой список:

names = [['Иван', 19],
        ['Женя', 20],
        ['Ольга', 21]]

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

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

names = [['Иван', 19],
        ['Женя', 20],
        ['Ольга', 21]]
names[1][0]

Преобразование

Двумерный список можно преобразовать в словарь с парами «ключ-значение»:

names = [['Иван', 19],
        ['Женя', 20],
        ['Ольга', 21]]
new_dict = dict(names)

Матрицы

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

В данном примере переменная А содержит двумерный список, т.е. список списков, каждый из которых состоит из трёх элементов. Тип list в Python не поддерживает работу со списками как с матрицами, но, тем не менее, позволяет матрицы хранить.

Массивы NumPy (Ndarray)

Создание

Для использования класса Ndarray предварительно необходимо импортировать библиотеку numpy:

import numpy as np

Для создания массива используется функция модуля numpy — array():

import numpy as np

new_array = np.array(['Иван', 'Женя', 'Ольга'])

В первый параметр функции array() передаётся список, поэтому способов создания столько же, сколько способов создания списков. При передаче в параметр многомерного списка будет создан многомерный массив:

import numpy as np

new_array = np.array([['Иван', 19],
                        ['Женя', 20],
                        ['Ольга', 21]])

Тип значения элементов

В данном примере элементы массива были приведены к строковому типу, так как каждый список главного списка содержал строковое значение. Тип значения элементов массива можно переопределять при создании массива, указывая его вторым параметром функции array():

import numpy as np

new_array = np.array([['Иван', 19],
                        ['Женя', 20],
                        ['Ольга', 21]], dtype=np.str)

Обращение к элементам

Обращение к элементам массива Ndarray производится аналогично получение элемента в многомерном списке.

Атрибуты класса Ndarray

Далее рассмотрим атрибуты класса Ndarray:

  • ndim — число измерений (осей) массива;
  • shape — размерность массива. Это tuple, содержащий натуральные числа (n, m) — длины массива по каждой оси (n — высота, m — ширина). Число элементов кортежа shape равно ndim.
  • size — количество элементов в массиве, равно произведению всех элементов атрибута shape;
  • dtype — тип элементов массива. NumPy предоставляет возможность использовать как встроенные типы, например: bool_, character, int8, int16, int32, int64, float8, float16, float32, float64, complex64, object_, так и собственные типы данных, в том числе и составные;
  • itemsize — размер каждого элемента массива в байтах;
  • data — буфер, содержащий фактические элементы массива. Обычно не нужно использовать этот атрибут, так как обращаться к элементам массива проще всего с помощью индексов.

Изменение размерности

Размерность массива darray в Python можно изменять методом reshape():

import numpy as np

new_array = np.array([['Иван', 19],
                        ['Женя', 20],
                        ['Ольга', 21]], dtype=np.str)
new_array.reshape(2, 3)

При этом количество элементов должно позволять это сделать, т.е. произведение элементов атрибута shape до и после изменения размера должно быть одинаковым. К примеру, нельзя изменить размерность массива с (3, 4) на (2, 5), но можно изменить её на (2, 6).

 

Comments

So empty here ... leave a comment!

Добавить комментарий

Sidebar