我有一个字符串列表,我希望通过制作新的“字符串列表”来加入两个单词。然而,根据我的假设,在运行一些代码之后,它没有接近结果的地方。
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”之前(到现在为止),但是为了安全起见,我正在扣除索引或位置。任何线索。
答案已在问题中更新。
答案 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']