2017-03-03 4 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を持っているライブラリクラスを持っています、今私は "文字列"を検索し、私のコードは上記です私が検索した場合、これは を「下」とは、例えば、うまく機能:「本のタイトル書籍ID」(重複を取り除く)は、私の文字列に本のコピーの1つを追加します。

ブッククラスは、文字列を返すブックADNのSTR(ブック)の「タイトル」を返すメソッドのget_titleを()ありブックの複数のコピーが存在する場合、私はちょうど、私が検索するすべての文字列のためになるよう、それらのいずれかを見つけたい私は

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

を得たが、私は

「ネットの下に」本の2つのコピーを持っています、私はちょうど私の結果にstr(本)のいずれかを追加したいです。 誰も私にこれを助けることができますか?

+1

上記のコードは不明である: 'book_title'と' search_result'は – RomanPerekhrest

+0

簡単には定義されていない:あなたがリストを使用し、その重複を削除する必要があります。 – TigerhawkT3

+0

@ TigerhawkT3 \t 問題はstr(book)が文字列 "book id:book title"を返し、2冊の書籍が重複しないように各書籍に固有の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コードを信頼しましたが、それは間違っています) –

関連する問題