列表中元组的大小为39。
这是我的代码:
def joinphrase(joinph,i):
length = len(joinph)
res = ['%s %s' % (joinph[i][0], joinph[i + 1][0])
for i in range(length)
if i < length - 1 and joinph[i][2] == 'B-NP' and joinph[i + 1][2] == 'I-NP']
return res
def sentjoinphrase(joinph):
return [joinphrase(joinph, i) for i in range(len(joinph))]
example = test_sents[0]
print (sentjoinphrase(example))
我希望使用条件连接来自不同元组的两个字符串并打印连接输出。但是输出根据列表中元组的大小打印了39次。
如何只打印一次输出?
答案 0 :(得分:1)
您还有许多其他问题,但对于您的print语句,您似乎正在使用
创建列表CreateThread
这是您的初始短语def sentjoinphrase(joinph):
return [joinphrase(joinph, i) for i in range(len(joinph))]
的长度然后在您的连接短语函数中,用
(for i in range(len(joinph))
因为这是一个列表推导,它只查看内部i变量,而不是传递的参数。
这看起来只是调用joinphrase短语长度的次数,在本例中为39,因为传递的参数是不必要的。
因此,如果您只是从joinphrase(只是多次)获得正确的值,为什么不像这样删除参数for i in range(length) # Where length is equal to the length of joinph
:
i
然后您不再需要拨打def joinphrase(phrase):
phrase_len = len(phrase)
return ['%s %s' % (phrase[i][0], joinph[i + 1][0])
for i in range(phrase_len)
if i < phrase_len - 1 and phrase[i][2] == 'B-NP' and phrase[i + 1][2] == 'I-NP']
因为参数是多余的,您可以直接致电sentjoinphrase