Сегодня рассмотрим основные алгоритмы, которые используются со списками.
- Поиск заданного элемента в массиве (списке)
- Поиск максимального (минимального) элемента в массиве (списке) — не использую методы списка max и min
- Выборка элементов массива (списка) по критерию
- Реверс массива (списка) — не используя метод списка reverse
Решать данные задачи мы будем без использования встроенных методов языка Python.
Поиск заданного элемента в списке
# задаем список mas = [3, 5, 67, -65, 34, 21] # задаем искомое значение point = 3 # вычисляем длину списка (количество элементов) l = len(mas) for i in range(l): if mas[i] == point: print("содержит") break else: print("не содержит")
В цикле мы сравниваем каждый элемент списка с эталоном (point). Если нашлось совпадение — мы выводим соответствующее сообщение и выходим из цикла. Если элементы списка перебраны, но совпадений так и не было — срабатывает else и выполняется команда print(«не содержит»)
Поиск максимального (минимального) элемента в списке
# задаем список mas = [3, 5, 67, -65, 34, 21] # предположим, что максимальный элемент равен mas[0] maximum = mas[0] for i in range(1, len(mas)): if mas[i] > maximum: maximum = mas[i] print(maximum)
Для поиска минимального элемента списка необходимо заменить знак на < (меньше)
Если найдутся элементы списка, большие mas[0] — значение максимума обновится. В противном случае значение максимума останется равным mas[0].
Выборка элементов списка по критерию
Задача: вывести номера элементов списка, которые больше своих соседей.
import random #Создадим список случайных чисел mas = [random.randint(0, 100) for i in range(20)] #Выведем его на экран print(mas) #Начиная со второго элемента массива mas[1] и до предпоследнего #сравниваем элементы списка со своими соседями for i in range(1, len(mas) - 1): if mas[i - 1] < mas[i] > mas[i + 1]: # выводим индексы подходящих элементов на экран в строку print(i, end=" ")
Задача: Найти произведение элементов списка, кратных 6 и оканчивающихся на 8. Если таких элементов нет — сообщить об этом
import random #Создадим список случайных чисел mas = [random.randint(0, 100) for i in range(20)] #Выведем его на экран print(mas) #Так как ищем произведение - присвоим переменной значение 1 p = 1 for i in range(len(mas)): if mas[i] % 6 == 0 and mas[i] % 10 == 8: p *= mas[i] #Если произведение по-прежнему ноль - значит таких элементов нет if p == 1: print("Нет таких элементов") else: print(p)
Реверс списка
Принцип алгоритма заключается в следующем: мы меняем местами 0-ый элемент с последним, 1-ый с предпоследним и д.т.
Итого количество таких обменов будет равно половине длины списка. Иначе элементы поменяются местами по-второму кругу и вернутся в первоначальное положение.
import random #Создадим список случайных чисел mas = [random.randint(0, 100) for i in range(20)] #Выведем его на экран print(mas) l = len(mas) for i in range(l//2): mas[i], mas[l - 1 - i] = mas[l - 1 - i], mas[i] print(mas)
Как вы можете заметить — цикл выполняется l/2 раз (10/2 = 10)
Задачи для самостоятельного решения:
- Найдите произведение самого большого и самого маленького элементов списка.
- Дан список случайных целых чисел. Замените все нечетные числа списка нулями. И выведете их количество
- Заполните список случайными числами и выполните реверс для части списка между элементами с индексами a и b (включая эти элементы)