【问题标题】:Replacing the values of a list whilst there is a while loop在有一个while循环时替换列表的值
【发布时间】:2014-06-25 02:29:13
【问题描述】:

假设我有['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

谢谢!

【问题讨论】:

  • 这有点难以理解...有什么办法可以让前几句话更清楚一点吗?

标签: python list loops while-loop


【解决方案1】:

首先,while 循环在这里是错误的选择,而将split 在里面 看起来很可笑。

其次,您不想replace list123 中的所有项目(如果其中有少于两个部分);仅在迭代每个索引 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']

【讨论】:

  • 谢谢!这看起来很不错,一定会派上用场的!
【解决方案2】:

如果我理解正确的话,看起来你想要的东西接近:

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)

【讨论】:

    猜你喜欢
    • 2016-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-11
    • 2021-07-27
    • 1970-01-01
    • 2015-01-21
    相关资源
    最近更新 更多