direction = ['north', 'south', 'east', 'west', 'down', 'up', 'left', 'right', 'back']
class Lexicon(object):
def scan(self, sentence):
self.sentence = sentence
self.words = self.sentence.split()
self.term = []
for word in self.words:
if word in direction:
part = ('direction','%s' % word)
self.term.append(word)
return self.term
lexicon = Lexicon()
当我传入lexicon.scan('north south east')
时,我期待返回给我[('direction','north'),('direction','south'),('direction','east')]
。相反,我得到['north']
。这就是我希望程序在整体上做的事情。
答案 0 :(得分:5)
此:
self.term.append(word)
应该是这样的:
self.term.append(part)
您放弃part
而不是将其添加到self.term
。
此外,你是return
从循环内而不是在循环之后 - 你需要将你的return
陈述放一个档次。这是工作代码:
for word in self.words:
if word in direction:
part = ('direction','%s' % word)
self.term.append(part)
return self.term
输出:
[('direction', 'north'), ('direction', 'south'), ('direction', 'east')]
答案 1 :(得分:4)
这里的这一行缩进太远了:
return self.term
它是for
循环体的一部分,因此你的循环过早地返回。将其缩小到一个缩进级别。
您还可以使用列表理解:
self.term = [('direction', word) for word in self.words if word in direction]
答案 2 :(得分:0)
我会补充其他答案,这不是获得两组交集的最佳方法。为什么不简单地使用Python sets
class Lexicon(object):
def bar(self, sentence):
return set(sentence.split()) & set(direction)
我觉得这个更清晰,更有效率。