Массивы Python

Основы

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

shapito_list = [1, 'qwerty', 4/3, [345, ['a', {5, 6, 7}]]]
print(shapito_list)
# Вывод:
[1, 'qwerty', 1.3333333333333333, [345, ['a', {5, 6, 7}]]]

Создание массива

Существует несколько способ создать массив. Ниже приведены примеры как это можно сделать.

можно_так = [1, 2, 3, 4, 5]
можно_так_2 = list('итерируемый объект')
а_можно_и_так = [i for i in range(5)]
print('можно_так:', можно_так)
print('можно_так_2:', можно_так_2)
print('а_можно_и_так:', а_можно_и_так)
print('можно_так[0]:', можно_так[0])
print('а_можно_и_так[3]:', а_можно_и_так[3])
# Вывод:
можно_так: [1, 2, 3, 4, 5]
можно_так_2: ['и', 'т', 'е', 'р', 'и', 'р', 'у', 'е', 'м', 'ы', 'й', ' ', 'о', 'б', 'ъ', 'е', 'к', 'т']
а_можно_и_так: [0, 1, 2, 3, 4]
можно_так[0]: 1
а_можно_и_так[3]: 3


Важно не забывать: индексация массива начинается с нуля.

Многомерный массив

Двухмерный массив в Python можно объявить следующим образом.

example_array = [[-1, 0, 0, 1], [2, 3, 5, 8]]
print(example_array[0])
print(example_array[1])
print(example_array[0][3])
# Вывод:
[-1, 0, 0, 1]
[2, 3, 5, 8]
1


Точно так же мы можем определить трехмерный массив или многомерный массив в Питоне.

example_array = [[[-1, 0], [0, 1]], [[2, 3], [5, 8]]]
print(example_array[0])
print(example_array[1])
print(example_array[0][1])
print(example_array[0][1][0])
# Вывод:
[[-1, 0], [0, 1]]
[[2, 3], [5, 8]]
[0, 1]
0

Операции с массивами

Давайте теперь рассмотрим операции, которые Пайтон позволяет выполнять над массивами.

Обход массива с использованием цикла for

Мы можем использовать цикл for для обхода элементов массива.

example_array = [1, 2, 3]
for i in range(len(example_array)):
    print(example_array[i])
# Вывод:
1
2
3


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

example_array = [1, 2, 3]
for i in example_array:
    print(i)
# Вывод:
1
2
3

Обход многомерного массива

Для того чтоб получить элементы многомерного массива придётся использовать вложенные циклы.

example_array = [[1, 2], [3, 4]]
for i in example_array:
    for x in i:
        print(x)
# Вывод:
1
2
3
4

Добавление

Мы можем использовать функцию insert() для вставки элемента по указанному индексу. Элементы из указанного индекса сдвигаются вправо на одну позицию.

example_array = [[1, 2], [3, 4]]
example_array.insert(0, -1)
example_array.insert(2, [-1, 13, 64])
print(example_array)
# Вывод:
[-1, [1, 2], [-1, 13, 64], [3, 4]]


Если вам нужно добавить элемент в конец массива, используйте функцию append().

example_array = [[1, 2], [3, 4]]
example_array.append(-1)
example_array.append([-1, 13, 64])
print(example_array)
# Вывод:
[[1, 2], [3, 4], -1, [-1, 13, 64]]


Для того, чтоб объединить элементы двух массивов используйте метод extend.

example_array = [1, 2, 3, 4]
example_array.extend([5, 6])
print(example_array)
# Вывод:
[1, 2, 3, 4, 5, 6]

Определение размера

Используйте метод len() чтобы вернуть длину массива (число элементов массива).
Не стоит путать размер массива с его размерностью!

example_array = [[1, 2], [3, 4]]
print('Размер массива:', len(example_array))
example_array.append(-1)
print('Размер массива:', len(example_array))
example_array.append([-1, 13, 64])
print('Размер массива:', len(example_array))
# Вывод:
Размер массива: 2
Размер массива: 3
Размер массива: 4


Поскольку индексация элементов начинается с нуля, длина массива всегда на единицу больше, чем индекс последнего элемента.

example_array = [[1, 2], [3, 4]]
print('Равна ли длина массива номеру последнего элемента + 1?',
len(example_array) is (example_array.index(example_array[-1]) + 1))
example_array.append(-1)
print('Увеличили размер массива.')
print('Равна ли теперь длина массива номеру последнего элемента + 1?',
len(example_array) is (example_array.index(example_array[-1]) + 1))
# Вывод:
Равна ли длина массива номеру последнего элемента + 1? True
Увеличили размер массива.
Равна ли теперь длина массива номеру последнего элемента + 1? True


Небольшое пояснение: метод списка .index() возвращает индекс элемента, значение которого совпадает с тем, которое передали методу. Здесь мы передаём значение последнего элемента и, таким образом, получаем индекс последнего элемента. Будьте осторожны: если в списке есть повторяющиеся значения, этот приём не сработает!

Срез

Срез Python предоставляет особый способ создания массива из другого массива.

example_array = [[1, 2], [3, 4]]
print(example_array[::-1])
print(example_array[1:])
print(example_array[0][:-1])
# Вывод:
[[3, 4], [1, 2]]
[[3, 4]]
[1]

Функция pop

В Python удалить ненужные элементы из массива можно при помощи метода pop, аргументом которого является индекс ячейки. Как и в случае с добавлением нового элемента, метод необходимо вызвать через ранее созданный объект.

example_array = [1, 2, 6, 3, 4]
print(example_array.pop(4))
print(example_array)
# Вывод:
4
[1, 2, 6, 3]


После выполнения данной операции содержимое массива сдвигается так, чтобы количество доступных ячеек памяти совпадало с текущим количеством элементов.

Методы массива

В Python есть набор встроенных методов, которые вы можете использовать при работе с list.

Метод Значение
append() Добавляет элементы в конец списка
clear() Удаляет все элементы в списке
copy() Возвращает копию списка
count() Возвращает число элементов с определенным значением
extend() Добавляет элементы списка в конец текущего списка
index() Возвращает индекс первого элемента с определенным значением
insert() Добавляет элемент в определенную позицию
pop() Удаляет элемент по индексу
remove() Убирает элементы по значению
reverse() Разворачивает порядок в списке
sort() Сортирует список

Модуль array

Если Вам всё-таки нужен именно классический массив, вы можете использовать встроенный модуль array. Он почти не отличается от структуры list, за исключением, пожалуй, объявления.
Вот небольшая демонстрация:

import array

example_array = array.array('i', [1, 2, 6, 3, 4]) # превый аргумент указывает на тип элементов. i означает integer
example_array.insert(0, -1)
print('После вставки:', example_array)
example_array.append(-1)
print('После добавления в конец:', example_array)
example_array.extend([5, 6])
print('После объединения со списком:', example_array)
print('Удалён элемент:', example_array.pop(4))
print('После удаления элемента:', example_array)
print('Срез:', example_array[0:4])
# Вывод:
После вставки: array('i', [-1, 1, 2, 6, 3, 4])
После добавления в конец: array('i', [-1, 1, 2, 6, 3, 4, -1])
После объединения со списком: array('i', [-1, 1, 2, 6, 3, 4, -1, 5, 6])
Удалён элемент: 3
После удаления элемента: array('i', [-1, 1, 2, 6, 4, -1, 5, 6])
Срез: array('i', [-1, 1, 2, 6])

Типы элементов массива

Элементы массива в модуле array могут быть следующих типов:

Код типа Тип в C Тип в python
‘b’ signed char int
‘B’ unsigned char int
‘h’ signed short int
‘H’ unsigned short int
‘i’ signed int int
‘I’ unsigned int int
‘l’ signed long int
‘L’ unsigned long int
‘q’ signed long long int
‘Q’ unsigned long long int
‘f’ float float
‘d’ double float

Как Вы можете видеть, со строками модуль не работает.

Оцените статью
О Python на русском языке
Добавить комментарий

Adblock
detector