0

私はpythonプロジェクトを行っており、文字列をキーと値のリストと比較したい-すべてのキーが単語文字列と特定の回数一致する場合、たとえばTrueを返す必要があります-defcompareTo(word, hand):

   kal = False 
   for d in wordlists: 
       if d in word: 
          kal = True 
   return kal

それは常にfalseを返しますどうすればtrueを返すことができますか?!? 助けてください!!!

もしそうなら

word = "hammer"

hand =  {'a': 1, 'h': 1, 'r': 1, 'm': 2, 'e': 1}

true であるパラメーターを挿入すると、値は各文字の頻度を表します。どのようにすれば false ではなく true を返すようにできますか...

comapreTo("hammer",{'a': 1, 'h': 1, 'r': 1, 'm': 2, 'e': 1})

False ではなく True を返す必要があり、True ではなく False をcomapreTo("hammers",{'a': 1, 'h': 1, 'r': 1, 'd': 2, 'e': 1})返す必要があります。

4

2 に答える 2

1

Counter文字の頻度を数えるために簡単に使用できます。

from collections import Counter

def compareTo(word, hand):
    return Counter(word) == hand

たとえば、Counter("hammer")Counter({'m': 2, 'a': 1, 'h': 1, 'r': 1, 'e': 1}); は辞書のようなものなのでCounter、これはに等しくなり{'a': 1, 'h': 1, 'r': 1, 'm': 2, 'e': 1}ます。

CounterPython2.7およびPython3.xに組み込まれています。Python 2.6以前で使用する必要がある場合は、http://code.activestate.com/recipes/576611/から入手できます。

于 2013-03-09T20:03:37.050 に答える
0

これは機能するはずです:

def compareTo(word, hand):
    d = hand.copy()
    for c in word:
        d[c] = d.get(c, 0) - 1
        if d[c] < 0:
            return False
    return True

word = "hammer"
hand =  {'a': 1, 'h': 1, 'r': 1, 'm': 2, 'e': 1}

print compareTo(word, hand)  # => True    
print compareTo("hammers", hand)  # => False
print compareTo("plum", {'f': 1, 'h': 1, 'k': 1, 'm': 1, 'l': 1, 'p': 1, 'u': 1, 'y': 1})  # => True
于 2013-03-09T20:01:28.133 に答える