1
我使用Python來實現的厄雷分析器已定義上下文無關規則如下:如何檢查對象列表中是否存在對象?
class Rule:
def __init__(self,string,i,j,dot):
self.i = 0
self.j = 0
self.dot = 0
string = string.split('->')
self.lhs = string[0].strip()
self.rhs1 = string[1].strip()
self.rhs = []
self.rhs1 = self.rhs1.split(' ')
for word in self.rhs1:
if word.strip()!= '':
self.rhs.append(word)
def __eq__(self, other):
if self.i == other.i:
if self.j == other.j:
if self.dot == other.dot:
if self.lhs == other.lhs:
if self.rhs == other.rhs:
return True
return False
要檢查Rule
類的對象是否一個圖表陣列內的存在與否,我已經使用了以下內容:
def enqueue(self, entry, state):
if state in self.chart[entry]:
return None
else:
self.chart[entry].append(state)
其中圖表是應該包含Rule
類的對象的列表的數組:
def __init__(self, words):
self.chart = [[] for i in range(len(words))]
而且我檢查規則是否爲存在於chart[entry]
如下(如果它不存在,那麼只需追加):
def enqueue(self, entry, state):
if state in self.chart[entry]:
return None
else:
self.chart[entry].append(state)
但是這給了我一個錯誤
TypeError: 'in <string>' requires string as left operand, not classobj
要爲了避免這種情況,我甚至在課堂上宣佈了__eq__
函數,但它似乎不起作用。任何人都可以幫助我一樣嗎?
你是否100%確定'self.chart [entry]'是一個列表?從錯誤消息看來,'self.chart [entry]'是一個字符串。 'enqueue'開始時如果你使用'print type(self.chart [entry])'顯示什麼? – Kevin
將'class rule:'更改爲'class Rule(object):' – Daenyth
@所有,編輯上面的代碼。 – AbbaShareen