Das Problem ist wie folgt. Ich habe eine Liste von StringsVerknüpfen ausgewählter Strings in der Liste der Strings
lst1=['puffing','his','first','cigarette','in', 'weeks', 'in', 'weeks']
und ich möchte die Zeichenfolge erhalten
lst2=['puffing','his','first','cigarette','in weeks', 'in weeks']
, die alle Vorkommen des sublist ['in', 'weeks']
Gründen verketten, die hier nicht relevant sind, wo find_sub_list1
genommen wird von here (und unten in dem Code enthalten):
npis = [['in', 'weeks'], ['in', 'ages']]
# given a list a candidate sublist, return the index of the first and last
# element of the sublist within the list
def find_sub_list1(sl,l):
results=[]
sll=len(sl)
for ind in (i for i,e in enumerate(l) if e==sl[0]):
if l[ind:ind+sll]==sl:
results.append((ind,ind+sll-1))
return results
def concatenator(sent, npis):
indices = []
for npi in npis:
indices_temp = find_sub_list1(npi, sent)
if indices_temp != []:
indices.extend(indices_temp)
sorted(indices, key=lambda x: x[0])
for (a,b) in indices:
diff = b - a
sent[a:b+1] = [" ".join(sent[a:b+1])]
del indices[0]
indices = [(a - diff, b - diff) for (a,b) in indices]
return sent
anstelle des gewünschten lst2
Dieser Codierer retur ns:
concatenator(lst1,['in', 'weeks'])
>>['puffing','his','first','cigarette','in weeks', 'in', 'weeks']
so verkettet es nur das erste Auftreten. Irgendwelche Ideen, wo der Code versagt?
einen besseren Weg, die beiden Wörter zu verketten wäre nach hinten zu arbeiten. so müssen Sie die restlichen Indizes nicht mit dem 'diff' anpassen. – aydow
Wie habe ich das vermisst! Großer Vorschlag! Danke vielmals! –