【问题标题】:How to find and split a string by repeated characters?如何通过重复字符查找和拆分字符串?
【发布时间】:2011-09-01 02:27:37
【问题描述】:

我试图在 python 中将一个字符串拆分为一个列表,由字符的变化分隔。我发现这非常困难,但我确信我想多了,错过了一个可能简单的解决方案。 示例:

'abgg22ffeeekkkk1zzabbb'

会变成:

['a', 'b', 'gg', '22', 'ff', 'eee', 'kkkk', '1', 'zz', 'a', 'bbb']

【问题讨论】:

    标签: python string


    【解决方案1】:
    import itertools
    [''.join(value) for key, value in itertools.groupby(my_str)]
    

    【讨论】:

    • 谢谢你,完美无缺。由于我对 python 还很陌生,所以我永远不会想出这种方法。我正在编写一个非常冗长的函数来完成您在一行中所做的事情。你有没有机会解释这到底是如何工作的,或者指出我正确的方向?我正在查看 itertools 文档,但这比我能够掌握的 ATM 多一点。
    • 是的,itertools 中的东西很棒,而且经常让人费解。 :-) 请参阅itertools.groupby 文档中的等效实现,我敢打赌您所写的内容长度相似。不同之处在于 itertools 真正迭代地执行它,因此不需要将整个序列加载到内存中或保留它来执行此操作。您可能想在迭代器上read up 以及为什么它们很好。
    【解决方案2】:
    >>> import re
    >>> my_str = 'abgg22ffeekkkk1zzabbb'
    >>> [m.group() for m in re.finditer(r'(.)\1*', my_str)]
    ['a', 'b', 'gg', '22', 'ff', 'ee', 'kkkk', '1', 'zz', 'a', 'bbb']
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-09-22
      • 2016-01-16
      • 1970-01-01
      • 2017-03-21
      • 2013-03-03
      • 2016-04-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多