В Питоне нет структуры данных, полностью соответствующей массиву. Однако, есть списки, которые являются их надмножеством, то есть это те же массивы, но с расширенным функционалом. Эти структуры удобнее в использовании, но цена такого удобства, как всегда, производительность и потребляемые ресурсы. И массив, и список – это упорядоченные коллекции, но разница между ними заключается в том, что классический массив должен содержать элементы только одного типа, а список 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 |
Как Вы можете видеть, со строками модуль не работает.
Можете помочь с решением ?:Из двух разноразмерных массивов (a и b) создать третий массив (с), элементами которого являются поочередно a[0] b[0] a[1] b[1] и т.д. до исчерпания меньшего по длине массива. Затем подряд остальные элементы более длинного массива.