【问题标题】:Sensing Two Consecutive Strings in String检测字符串中的两个连续字符串
【发布时间】:2018-10-28 10:08:09
【问题描述】:

如果我有aaabbbccc,我想将它们更改为a3b3c3

我正在为此使用 if 语句.. 但它看起来效率太低了。

也许正则表达式会有所帮助,但正则表达式可以只搜索连续的吗?

如果我有aaabbbcccaaa,那么我想更改它们a3b3c3a3 列出这个.. 这意味着算法只搜索“连续数并计算它们”变成整数。

我们将不胜感激。

def comp(string):


index = []

for i in range(len(string)):
    try:
        if string[i] is not string[i+1]:
            index.append(i)
    except:
        pass

first = string[index[0]] + str(index[0]+1)
print(first)

message_comp = [first]
for i in range(1, len(message_comp)):
    message_comp.append(message[index[i]]*(index[i-1]+1))

final = ''.join(message_comp)

return final

【问题讨论】:

    标签: python regex python-3.x sorting search


    【解决方案1】:

    itertools.groupby

    创建一个从可迭代对象中返回连续键和组的迭代器

    import itertools
    x = 'aaabbbcccaaa'
    groups = [i + str(len([*j])) for i, j in itertools.groupby(x)]
    
    # ['a3', 'b3', 'c3', 'a3']
    

    join 完成:

    ''.join(groups)
    
    # a3b3c3a3
    

    如果需要,replace 删除1

    ''.join(groups).replace('1', '') 而不是''.join(groups)

    【讨论】:

    • 弃用 1 的最简单方法是什么?比如对于 abbccc,不是 a1b2c3 而是 ab2c3
    • @Beverlie 更新了我的答案,最后使用''.join(groups).replace('1', '')
    • @chriz [*j] 是什么意思?
    • [*j]j(一个groupby对象)的内容解包到一个列表中,以便您检查它的长度。
    【解决方案2】:

    也许是 itertools groupby?

    from itertools import groupby
    s = "aaabbbcccaaa"
    groups = groupby(s)
    a = [(label, sum(1 for _ in group)) for label, group in groups]
    b = [i for sub in a for i in sub]
    print("".join(map(str,b)))
    
    output: a3b3c3a3
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-01-20
      • 1970-01-01
      • 1970-01-01
      • 2011-02-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多