這是我之前的問題的第二部分,但我決定將它們作爲單獨的問題詢問。我遵循以下代碼實現麻省理工學院講義/視頻中的散列表。講師沒有解釋他的代碼,所以我無法從視頻中得到答案。我是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
只是一個空列表的列表,如果語句永遠不會是真的,因此不會返回任何內容。但在視頻講師的代碼工作正常。爲什麼會這樣?
我讀的代碼錯誤的縮進?我是Python的新手,所以是這樣的,或許if i==e
是真的,該方法什麼都不返回,否則它跳到最後一行並追加值,從而確保一個元素不會被添加兩次?我感謝任何幫助,謝謝!
請考慮編寫代碼,而不是將其作爲圖片嵌入。謝謝! – iehrlich