2012-03-01 11 views
0
に翻訳する

私は単語でデータファイルを検索したいコードを書いています。ちょうど楽しみのために!考え方はいくつかの文字を定義することで、プログラムは正確な入力を含む単語を探します。 私はすでにコードを書いてsuccededしていますが、実際には適切な出力を与える調整が必要です。Python:検索する語彙を

これは、コードブロックです:

def findword(): 

letters = set(str(raw_input("Type letters: "))) 

for item in wordlist:  # already defined list containing the words 
    if letters >= set(item): 
     if len(item) <= len(letters): 
      print item 

私は単語のリスト付きの文字を比較するためにセットを使用しています。 問題は、入力にその特定の文字の1つだけが含まれていても、同じ文字の2つを含む単語が出力になる可能性があるということです。だから、出力が正確な入力文字になるが、同じ方法で配置されないようにするにはどうすればよいでしょうか? これで私を助けるのに時間がかかるのであれば、私は感謝しています!ありがとう!

アレックス

+0

宿題のような臭い – Sid

+1

あなたはすべてのアナグラムを探したいですか?あなたはin/outputsの例を挙げることができますか? –

+0

入力が「水」の場合、「水たまり」または「水たまり」と一致しますか? – Sid

答えて

1

は、私が入力された場合、例えば、abcは、あなたがcbabcaではなくabcdまたはabccを一致させたいような方法であなたの質問を解釈します。だから、基本的にアナグラムを見つけたい。

あなたは、各文字の出現回数を追跡するために辞書を使用することができます

from collections import defaultdict 

def make_letter_dict(word): 
    letters = defaultdict(int) 
    for c in word: 
    letters[c] += 1 

letters = make_letter_dict(raw_input("Letters: ")) 
words = (w for w in wordlist if make_letter_dict(w) == letters) 
+0

あなたの解釈はおそらく正しいです:)うまくいけば、彼は例を挙げます。 – Sid

+0

正確に。 "abc"が入力されている場合、出力には "acc"または "abbc"が含まれないことがあります。私はそれを試してみます。どうもありがとう! – Alex

0

あなただけの出力の配置を変更したい場合は、0とlen(outputStr間2つの乱数を生成します-1)/ 2とlen(outputStr-1)/ 2 + 1とlen(outputStr)-1との間でスワップします。