问题如下。我有一个字符串串联字符串列表中的选定字符串
lst1=['puffing','his','first','cigarette','in', 'weeks', 'in', 'weeks']
,我想获得字符串列表
lst2=['puffing','his','first','cigarette','in weeks', 'in weeks']
这是连接子列表['in', 'weeks']
的任何occurence对于那些无关紧要的这里那里find_sub_list1
摘自原因, here(和包括在下面的代码):
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
所需lst2
此编码器retur代替ns:
concatenator(lst1,['in', 'weeks'])
>>['puffing','his','first','cigarette','in weeks', 'in', 'weeks']
所以它只连接第一次出现。关于代码失败的任何想法?
一个更好的方式来连接这两个词将向后工作。这样你就不会需要用'diff'来调整其余的索引。 – aydow
我怎么错过了!伟大的建议!非常感谢! –