有while循环时替换列表的值

时间:2014-05-07 21:55:47

标签: python list loops while-loop

所以说我有['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

谢谢!

2 个答案:

答案 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)