所以说我有['habcuxabc929abc', 'tabc', 'q', 'jabcuabc9']
。
我基本上想要做的是将此列表中的每个元素拆分为abc
并计算其余部分。因此,上面指定的列表如下所示:[3, 1, 1, 3]
。我所做的就是这样,但我想要实现的主要目标是,如果此值小于2,则删除所有abc
并将其替换为q
。 (到目前为止,虽然它可能不是pythonic)。如果该值大于2,那么我只是希望它删除最后一个'abc'
并将其替换为q
,将所有先前的abc
保留为原样,但我不是知道如何做到这一点,任何建议将不胜感激。
while n < len(list123):
dummylist = [len(r.split('abc')) for r in list123]
if dummylist[n] <= 2:
print 'true'
list123 = [i.replace('abc',' q ') for i in list123]
n=n+1
elif dummylist[n] > 2:
print 'false'
list123 = [i.replace('abc',' q ') for i in list123]
n=n+1
谢谢!
答案 0 :(得分:2)
首先,while
循环在这里是错误的选择,并且在中设置split
它似乎很荒谬。
其次,如果replace
中的所有项目碰巧少于两个部分,您就不希望list123
;迭代每个索引list123[i]
时,只修改i
。
第三,要仅移除最后'abc'
您可以使用str.rsplit
并指定最多一个拆分,然后str.join
与'q'
一起返回。
这更整洁:
dummylist = [len(r.split('abc')) for r in list123]
for i, n in enumerate(dummylist):
if n <= 2:
list123[i] = list123[i].replace('abc', 'q')
else:
list123[i] = 'q'.join(list123[i].rsplit('abc', 1))
这给了我list123 == ['habcuxabc929q', 'tq', 'q', 'jabcuq9']
。
答案 1 :(得分:0)
如果我理解正确,看起来你想要一些接近的东西:
lst = ['habcuxabc929abc', 'tabc', 'q', 'jabcuabc9']
for i in range(len(lst)):
dummy_lst = lst[i].split('abc')
if len(dummy_lst) <= 2:
lst[i] = ' q '.join(dummy_lst)
else:
lst[i] = 'abc'.join(dummy_lst[:-1]) + ' q ' + dummy_lst[-1]
print(lst)