C'est une solution:
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]
Il trouve d'abord les indices de u'DT'
et u'IN'
dans mylist
, puis il les zips ensemble dans une liste de tuples, ij
. Chaque tuple est le début et la fin de l'intervalle à partir duquel le programme est censé extraire des valeurs. Les valeurs sont d'abord extraites telles qu'elles apparaissent dans mylist
en temp_list
. La dernière étape constitue la cible new_list
qui joint et traite les valeurs extraites stockées dans temp_list
.
Cette solution ne vous donne pas les valeurs entre crochets ()
- il semble que pour ce faire, des éléments de new_list
devraient soit être transformé en tuples, à savoir ('Satisfactory tracing',)
ou le support devrait être une partie de la chaîne '(Satisfactory tracing)'
.
Edition - solution pour un nombre quelconque de chaînes entre DT
et IN
- tout jusqu'à new_list
est le même, new_list
est formée par extraction premier élément de chaque élément dans la sous-liste de temp_list
et en les joignant en une seule chaîne,
new_list = [((' ').join(map(lambda x: x[0], sub_el))) for sub_el in temp_list]
Test avec
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')]
donne
['Satisfactory Satisfactory tracing', 'fairly persistent', 'persistent']
@engr_s C'est le deuxième élément du résultat: '('assez persistant')' – Barmar
Essayez d'utiliser itertools.dropwhile() et itertools.takewhile(). –