在有while循环时替换列表的值

2024-09-22 16:35:13 发布

您现在位置:Python中文网/ 问答频道 /正文

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

谢谢!你知道吗


Tags: in元素列表forlenpythonic事情replace
2条回答

首先,这里的while循环是错误的选择,将split放在内部似乎很可笑。你知道吗

第二,如果list123中的任何项的部分少于两部分,则不希望replace所有的项;只在迭代每个索引i时修改list123[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']。你知道吗

如果我没听错的话,看起来你想接近:

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)

相关问题 更多 >