我正在写一个程序来标记词性,生成一个列表。下面是程序中的一个示例函数:
phrase = [['he',''],['is', ''],['believed', ''],['to',''],['have',''],['believed','']]
def parts_tagger(input_list):
parts = []
for [x,y] in input_list:
prior_word = input_list[input_list.index([x,y]) - 1][0]
if x.startswith('be') and y == '' and prior_word == 'is':
parts.append([x,'passive'])
else:
parts.append([x,y])
return parts
print (parts_tagger(phrase))
当您运行这段代码时,Python会找到条件应用的第一个单词(第一个“belied”),并正确地标记它:
[['he', ''], ['is', ''], ['believed', 'passive'], ['to', ''], ['have', ''], ['believed', 'passive']]
但之后,它不知何故将相同的标签应用于列表中条件不适用的其他相同单词(第二个“相信”)。我做错什么了?如何解决这个问题并强制Python独立地处理列表中的每个项目?你知道吗
这条线出了问题
^{} 返回第一个匹配项的索引。你知道吗
你可以用^{} 来解决你的问题。改变你的循环和下一行到这些。你知道吗
输出将如预期的那样
正如Shawn指出的below (in a now deleted comment),我认为您需要从第二个索引开始,手动填充第一个元素的值。这是因为对于第一个元素,您将没有任何先前的值。有两种解决方法
从第二个元素开始
在你的身体里添加一个条件。你知道吗
相关问题 更多 >
编程相关推荐