【问题标题】:How to split string into substrings of identical letters?如何将字符串拆分为相同字母的子字符串?
【发布时间】:2019-01-07 16:16:35
【问题描述】:

如何将由小写英文字母组成的字符串拆分为由相同字母组成的子字符串 - 所以对于 输入

"aaaabbcccdd"

函数应该输出一个列表:

["aaaa", "bb", "ccc", "dd"]

【问题讨论】:

  • 结帐itertools.groupby
  • 应该将 é 和 e 归类为相同的吗?你试过什么?
  • 字符串只包含英文字母字符。我会修改帖子。

标签: python string


【解决方案1】:

以下使用itertools.groupbystr.join 的列表理解将起作用:

from itertools import groupby

s = "aaaabbcccdd"
[''.join(g) for _, g in groupby(s)]
# ["aaaa", "bb", "ccc", "dd"]

【讨论】:

  • 谢谢,这是一个很好的解决方案!
【解决方案2】:

您可以使用带有反向引用的正则表达式:

import re
from operator import itemgetter
print(list(map(itemgetter(0), re.findall(r'((.)\2*)', "aaaabbcccdd"))))

这个输出:

['aaaa', 'bb', 'ccc', 'dd']

【讨论】:

    【解决方案3】:

    计数器解决方案 -

    from collections import Counter
    
    [i*j for i, j in Counter("aaaabbcccdd").iteritems()]
    # OP ["aaaa", "bb", "ccc", "dd"]
    

    【讨论】:

    • 你有没有尝试过不太有序的输入?
    • IP "aaaabbcccddasdffas" OP ['aaaaaa', 'ccc', 'bb', 'ddd', 'ff', 'ss'] 顺序无关紧要,因为计数器会计算字母
    • 您注意到'aaaaaa' 在这种情况下不是输入的子字符串吗?
    • lowercase alphabetic letters into substrings consisting of identical letters 由相同字母组成的子字符串告诉我所有as 应该组合在一起
    • 好吧,我想 OP 可能会更清晰或提供更通用的示例 :) 在我看来,在保持秩序的同时只保留“子字符串”(您的操作不是!)。只是想指出区别。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-25
    • 2019-05-22
    • 1970-01-01
    相关资源
    最近更新 更多