Python

Проверка повторения числа в массиве

Есть код, который создаёт список по формуле, затем двоичным поиском находит индекс введённого числа. Как сделать так чтобы помимо индекса искомого числа, искались его повторения и в итоге выводилось кол-во повторений
n=int(input())
a=[]
x=2
for i in range(0,n):
a.append(int(x))
x+=4
print(a)

low=0
high=len(a)-1

number=int(input())

while low <= high:
mid = (low+high) // 2
if number < a[mid]:
high=mid-1
elif number > a[mid]:
low=mid+1
else:
print("индекс=", mid)
break

else:
print("нет числа")
Alex Gevenko
Alex Gevenko
262
array.count(5) - вернет количество вхождений пятерки в список. можно прогнать бинарным поиском на наличие определенного числа и если оно есть, с помощью данного метода узнать количество его вхождений в список.
сделать это именно бинарным поиском имхо анриал, т. к. если список будет:
[1,2,3,4,5,5,5,7,8,9,10], то мы, взяв середину не сможем точно определить, в какую сторону нам сдвигать поиск (а в данном случае куда бы не сдвинули - получим некорректный результат, т. к. одну из цифр 5 мы физически не увидим, благодаря особенностям алгоритма)

если кто-то меня поправит - буду рад.
ВП
Виктор Павлов
12 881
Лучший ответ
Мне лень писать весь код с 0 поэтому я покажу как это будет выглядеть, если использовать встроенный модуль bisect

from bisect import bisect_left, bisect_right

l = [1,2,2, 3,3, 4, 4, 4, 4, 4, 5, 5, 5]
result = bisect_right(l, 4) - bisect_left(l, 4)
print(result)

Я думаю задумка тебе должна быть ясна т. е. твоя задача написать код, который просто будет правильно вычислять левую и правую границы в таком случае разница между этими и границами и будет являться числом повторнений
КА
Куан Алим
73 814
Если у Вас список представляет собой арифметическую прогрессию (согласно формуле создающей его), повторения каких чисел Вы ожидаете в нем найти?

По-моему, чтобы вывести количество повторений, достаточно дописать рядом с выводом индекса
print("Количество повторений равно единице.")