2017-07-17 89 views
0

這是我之前的問題的第二部分,但我決定將它們作爲單獨的問題詢問。我遵循以下代碼實現麻省理工學院講義/視頻中的散列表。講師沒有解釋他的代碼,所以我無法從視頻中得到答案。我是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是真的,該方法什麼都不返回,否則它跳到最後一行並追加值,從而確保一個元素不會被添加兩次?我感謝任何幫助,謝謝!

+1

請考慮編寫代碼,而不是將其作爲圖片嵌入。謝謝! – iehrlich

回答

0

「[I] S認爲也許如果我== e爲真則該方法返回 沒什麼的情況下,否則跳到最後一行並追加值, 從而保證的元件不添加兩次?」

是的,這是發生了什麼事。你明白了!做得好。你說你是新手,所以對未來的建議是以交互模式啓動Python,只需在命令行中運行python即可。在那裏你可以測試簡單的代碼(比如這個插入函數)並查看它的行爲,這可以幫助你全面瞭解一個函數中發生了什麼。

這是a tutorial I found在互動模式,如果你有興趣。

if i==e: return是一個有條件的,但它只佔用一行,在這種情況下不需要縮進。

+0

非常感謝! – Iltl