在字符串中就地加入单词

时间:2013-06-26 19:20:36

标签: python string python-2.7

我有一个字符串列表,我希望通过制作新的“字符串列表”来加入两个单词。然而,根据我的假设,在运行一些代码之后,它没有接近结果的地方。

text = ['A','123','BCR','EF','RTY','B','123','VCR','EF','B','123', 'RRR', 'EF', 'RTY']

for k in range(0,len(text)):
        a = [i for i,x in enumerate(text) if x == "EF"]
        b = [i for i,x in enumerate(text) if x == "RTY"]
        for l in range(0,len(a)):
            for m in range(0,len(b)):
                if a[l] == b[m] - 1 :
                    text[a[l]] = text[a[l]]+text[b[m]]

正如你所看到的,“EF”总是在“RTY”之前(到现在为止),但是为了安全起见,我正在扣除索引或位置。任何线索。

答案已在问题中更新。

2 个答案:

答案 0 :(得分:2)

要加入列表中所有相邻的'EF''RTY'个非重叠对:

L = ['A','123','BCR','EF','RTY','B','123','VCR','EF','B','123','RRR','EF','RTY']

result = []
pairs = iter(zip(L, L[1:]+['']))
for a, b in pairs:
    if a == 'EF' and b == 'RTY': # found adjacent
       a += b # join
       next(pairs, None) # skip the next a ('RTY')
    result.append(a)
L[:] = result # modify inplace
# -> ['A','123','BCR','EFRTY','B','123','VCR','EF','B','123','RRR','EFRTY']

支持两个以上的词语:

seq = ["EF", "RTY", "B"]
pos = i = 0
while i < len(L):
    if L[i:i+len(seq)] == seq:
        L[pos] = "".join(seq)
        i += len(seq)
    else:
        L[pos] = L[i]
        i += 1
    pos += 1     
del L[pos:]

答案 1 :(得分:1)

字符串在python中是不可变的,你应该将连接的结果分配回变量:

text[a[l]] = text[a[l]]+text[b[m]]

<强>输出:

['A', '123', 'BCR', 'EFRTY', 'RTY', 'B', '123', 'VCR', 'EF', 'B', '123', 'RRR', 'EFRTY', 'RTY']