ヒント: モジュールを使用しcollections
ます。
コードに関しては、スタイルやその他の問題に関するいくつかの追加のヒント:
function
関数の名前として単語を使用しないでください。function
は「特別な」単語であり、それを昔ながらの関数名として使用すると、その特別な意味が薄れます。
- ループ変数に1 文字の名前 ( ) を使用しないでください
i
** - わかりやすい名前を使用してください。こちらfor word in mylist:
が適当でしょう。
- コードに論理エラーがあります -
word
リストに a が表示される場合、定義によりword in list == True
. したがってcounter
、ゼロを超えることはありません。
** 補足: 一文字の変数名は、変数が何を意味するか、または何を含むべきかについての情報を提供しないため、不適切なスタイルです。私は個人的n
にm
、 、p
、i
、j
がk
数学コードで許容されるループ変数名であると考えていますn,m,p i,j,k
。これは歴史的な理由によるものです。
論理エラーを見つけるためのヒント:
# Relevant part of your code
my_list = ['a','b','c','d']
for item in my_list:
if item in my_list:
print "item %s in list" % item
else:
print "item %s not in list" % item
出力は次のとおりです。
item a in list
item b in list
item c in list
item d in list
これは、上記のコードがトートロジーであるためです。リストから値を取得すると、その値がそのリストに含まれているかどうかをすぐに尋ねます。答えは常に「はい」になります。
これは実際にはあなたが望んでいた論理テストではありません。あなたが本当にやりたいことは、すでに見た単語を追跡することです。すでに見た単語を追跡する方法が必要かもしれません。それとも、あなたが見たすべてのユニークな単語を追跡する魔法のようなコードが必要ですか? (ヒント:collections
モジュールを見てください。)
一般的に言えば、デバッガーの使用方法を学ぶことも役に立ちます。これにより、実行中のプログラムの中間状態を確認できます。Spyder
は、デバッガーが統合された Python IDE pdb
(および他の多くの優れた機能) です。チェックしてみてください。
編集 4:collections
モジュールを使用してみたことを述べています。-しかし、「を返す必要があるため、出力は不適切でしたint
」.
これについて黙想してください:
>>> import collections
>>> my_string = "abc aabc ccab a acbbbaa"
>>> my_counter = collections.Counter(my_string)
>>> my_counter
Counter({'a': 8, 'b': 6, 'c': 5, ' ': 4})
>>> my_counter.keys() # Get a list of unique things in the counter
['a', ' ', 'c', 'b']
>>>
リストに含まれる物の数を確認する方法を知っていますか?
ヒント 2:オブジェクトを呼び出すことで、オブジェクトの属性を確認できますdir()
。オブジェクトに対して何を行うことが許可されているか、またはオブジェクトに対して呼び出すことができるメソッドがわからない場合は、次のようにして確認してください。
>>> dir(my_counter)
['__add__', '__and__', '__class__', '__cmp__', '__contains__', '__delattr__',
'__delitem__', '__dict__', '__doc__', '__eq__', '__format__', '__ge__',
'__getattribute__', '__getitem__', '__gt__', '__hash__', '__init__',
'__iter__', '__le__', '__len__', '__lt__', '__missing__', '__module__',
'__ne__', '__new__', '__or__', '__reduce__', '__reduce_ex__', '__repr__',
'__setattr__', '__setitem__', '__sizeof__', '__str__', '__sub__',
'__subclasshook__', '__weakref__', 'clear', 'copy', 'elements', 'fromkeys',
'get', 'has_key', 'items', 'iteritems', 'iterkeys', 'itervalues', 'keys',
'most_common', 'pop', 'popitem', 'setdefault', 'subtract', 'update', 'values',
'viewitems', 'viewkeys', 'viewvalues']