0

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

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”之前(直到现在),但为了安全起见,我正在扣除索引或位置。任何线索。

答案已在问题中更新。

4

2 回答 2

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:]
于 2013-06-27T00:28:42.903 回答
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']
于 2013-06-26T19:40:57.827 回答