Найти в Дзене

Программирование на Python. Алгоритм поиска массива в массиве

Доброго времени суток, читатели, зрители моего канала programmer's notes. Не забывайте подписываться и писать свои комментарии к моим статьям и видео.

А это подборки моих материалов на канале

Данная статья из моей подборки по алгоритмам.

Поиск массива в массиве (списка в списке) на Python

Одно из моих наблюдений заключается в том, что студента чрезвычайно трудно заставить написать алгоритм, если он знает, что можно использовать готовое решение или готовую библиотечную функцию. Вот попробуйте ка заставить его искать массив в массиве на Python. Я имею в виду одномерные списки, конечно. А ведь кто-то же должен писать и такое. Только не говорите мне про ИИ, не доводите ради бога меня до инфаркта. Я то вырос на совсем иных примерах, мне напротив всё время хочется написать своё решение. Но что делать, старая школа.

И так есть два линейных списка, состоящих из чисел. Нужно найти первое вхождение одного списка в другом. Это пример алгоритма, который легко пересказать на обычном естественном языке. Берём первый элемент массива и ищем его во втором. Если элемент найден, то сравниваем последующие элементы списков. Если все совпадут, то первое вхождение найдено.

Именно такой алгоритм реализован в следующей программе. Функция получает два массива и номер элемента, с которого следует начинать поиск. Третьим параметром функции будет номер элемента массива list2 откуда начнём поиск.

Текст программы см. ниже
Текст программы см. ниже
primer125.py

Представленная программа берёт списки со стандартного устройства. Числа располагаются через пробел друг от друга. В начале идёт массив, где будет осуществляться поиск, потом массив, который будем искать. Для проверки программы удобно поместить исходные файлы в файл и воспользоваться перенаправлением

./p1.py < in

или

python3 p1.py < in

Например, для файла

1 2 3 4 1 3 4 1 3 4 1 2 1 1
3 4 1 2

Получим
8

Хорошего программирования. Оставляйте свои комментарии, не забывайте про лайки и подписывайтесь на мой канал programmer's notes.

Программирование похоже на написание музыки. Многозадачное программирование на написание симфонии
Программирование похоже на написание музыки. Многозадачное программирование на написание симфонии