class BinaryStringList():
def __init_(self):
self.item = []
def strAdd(self,item):
self.items.append(item)
def finditem(self, item):
if len(self)==0:
print("List is empty!")
else:
midpoint = len(self)//2
if self[midpoint]==item:
print("Item Found ", item)
else:
if item<self[midpoint]:
return finditem(self[:midpoint], item)
else:
return finditem(self[midpoint+1:], item)
Поэтому, когда я нахожусь, у меня проблема при попытке добавить элементы в список. Если я сделаю что-то вроде:Двоичный поиск и списки
alist = BinaryStringList()
alist.strAdd("test1")
мой код не указывает, что объект не имеет атрибута. Не уверен, почему он терпит неудачу, так как у меня есть почти тот же код для другой программы, кроме того, что find использует последовательный поиск, где это бинарный поиск.
его 'item' и вы добавляете к' 'деталей. Опечатка. – zengr
класс SequentialStringList(): Защиту __init __ (само): self.items = [] Защиту strAdd (самостоятельно, пункт): self.items.append (пункт) Защиту FindItem (самостоятельно, пункт): для строки в self.items: если строка == пункт: возврата строки возврата 'None' защиту iadd(): ALIST = SequentialStringList() для й в диапазоне (20): ALIST .strAdd ("тест" + ул (x)) печать (alist.findItem ("тест19")) работает нормально. –
Side-note: Если это для класса, то что бы то ни было, но если вы пытаетесь сделать это для реального кода, я должен отметить, что [модуль 'bisect'] (https://docs.python.org/ 3/library/bisect.html) является правильным правилом для двоичного поиска в Python. – ShadowRanger