這是一個解決辦法:
idt = [item for item in range(len(mylist)) if mylist[item][1] == u'DT']
jdt = [item for item in range(len(mylist)) if mylist[item][1] == u'IN']
ij = zip(idt,jdt)
temp_list = [mylist[i[0]+1:i[1]] for i in ij]
new_list = [str(elem[0][0]+ ' ' + elem[1][0]) for elem in temp_list]
它首先發現的mylist
u'DT'
和u'IN'
指數,那麼它呼嘯而過它們一起放到ij
元組的列表。每個元組是程序應該從中提取值的時間間隔的開始和結束。這些值首先被提取,因爲它們出現在mylist
到temp_list
中。最後一步形成連接並處理存儲在temp_list
中的提取值的目標new_list
。
這種解決方案並不會給你括號內()
值 - 似乎實現這一點,new_list
元素要麼必須變成元組,即('Satisfactory tracing',)
或支架必須是字符串'(Satisfactory tracing)'
的一部分。
編輯 - 爲DT
和IN
之間的任何數量的字符串溶液 - 一切直到new_list
是相同的,new_list
是通過從在temp_list
子列表的每個元素中提取第一元件,並將它們加入到一個串形成,
new_list = [((' ').join(map(lambda x: x[0], sub_el))) for sub_el in temp_list]
測試與
mylist = [('a', u'DT'), ('Satisfactory', u'JJ'), ('Satisfactory', u'JJ'),
('tracing', u'VBG'),('with', u'IN'),('a', u'DT'),('fairly', u'RB'),
('persistent', u'JJ'),('with', u'IN'), ('a', u'DT'),('persistent', u'JJ'),
('with', u'IN')]
產生
['Satisfactory Satisfactory tracing', 'fairly persistent', 'persistent']
@engr_s這是結果的第二個元素:'('相當持久')' – Barmar
嘗試使用itertools.dropwhile()和itertools.takewhile()。 –