2017-03-03 80 views
-1
def search(self, string): 
     result = "" 
     if len(string) >= 4: 
      for book in self.collection: 
       if (string.lower() in book.get_title().lower): 
        result += str(book) 
      return result 

我有具有library.collection作为本书的对象列表库类,现在我想要搜索的“弦”,回到我的书想要,以上是我的代码。 书类有方法get_title()返回的书ADN STR(书)“称号”返回一个字符串“书编号:书名”(删除重复)加入书副本一进我的字符串

这个效果很好,例如,当我搜索 “下”我得到

10: Under the Net 
    11: Under the Net 
    117: Under the Skin 

,但我有这本书的两个副本“网下”

我只是想找到其中的一个,所以对于每个字符串我搜索,如果有一本书的多个副本,我只是想添加一个str(书)到我的结果。 任何人都可以帮助我吗?

+1

上面的代码还不清楚:'book_title'和'search_result'是不确定的 – RomanPerekhrest

+0

简单地说:你应该使用一个列表,并删除其重复。 – TigerhawkT3

+0

@ TigerhawkT3 \t 问题是str(book)返回一个字符串“book id:book title”,并且每本书都有一个唯一的id,所以这两本书不重复 – Sally

回答

-1

使用一组而不是字符串作为结果。集合不允许重复,并且将元素添加到集合比追加到字符串要快。如果这是你想要的,你可以使用join在最后创建一个字符串。

def search(self, string): 
    results = set() 
    if len(string) >= 4: 
     for book in self.collection: 
      if (string.lower() in book_title.get_title().lower): 
       results.add(str(book)) 
     return "".join(results) 
+0

但事情是每本书都有一个独特的ID ..所以即使他们是同一本书,他们有不同的ID – Sally

+0

'book_title.get_title()。lower'不会削减它。 –

+1

,它会返回所有没有空格的结果的连接列表:几乎没有用。你还没有测试过,它不可能(呃,你信任的OP代码,但它是错误的) –