これは私の以前の質問の2番目の部分であることを意図していましたが、別の質問としてそれらを尋ねることにしました。私はMITの講義ノート/ビデオからハッシュテーブルを実装する次のコードに従っています。講師は彼のコードを説明しないので、私はビデオからの質問への答えを得ることができません。私はOOPの新人です。私はこの特定の方法を完全に理解したいと思います。ここでは実装されてcodeです:クラスをハッシュするためのPythonの理解方法
class intSet(object):
#An intSet is a set of integers
def __init__(self):
"""Create an empty set of integers"""
self.numBuckets = 47
self.vals = []
for i in range(self.numBuckets):
self.vals.append([])
def hashE(self, e):
#Private function, should not be used outside of class
return abs(e)%len(self.vals)
def insert(self, e):
"""Assumes e is an integer and inserts e into self"""
for i in self.vals[self.hashE(e)]:
if i == e: return
self.vals[self.hashE(e)].append(e)
def member(self, e):
"""Assumes e is an integer
Returns True if e is in self, and False otherwise"""
return e in self.vals[self.hashE(e)]
def __str__(self):
"""Returns a string representation of self"""
elems = []
for bucket in self.vals:
for e in bucket: elems.append(e)
elems.sort()
result = ''
for e in elems: result = result + str(e) + ','
return '{' + result[:-1] + '}'
方法はinsert(self,e)
働く理由を私は理解していません。ここに私の理解がある。 値e
は、returnステートメントが実行された場合にのみ追加され、ifステートメントif i==e
によって異なります。最初はself.vals
が空のリストのリストにすぎないので、このif文は決して真実ではないので、何も返されないと私は信じています。しかし、ビデオ講師では、コードは正常に動作します。これはなぜですか?
インデントのコードが間違っていますか?私はPythonの初心者なので、おそらくif i==e
がtrueの場合はメソッドは何も返しません。それ以外の場合は最後の行にスキップして値を追加するので、要素が2回追加されません。私は助けていただきありがとうございます!
コードを画像として埋め込む代わりに記述することを検討してください。ありがとう! – iehrlich