首页 > 解决方案 > 将 '000111010010111' 拆分为 ['000','111','0',1','00','1','0','111']

问题描述

是否有一些简洁的方法可以将一串 0 和 1 拆分为全 0 和全 1 的同质连续段?标题中的示例。

我当然可以使用嵌套循环、条件和.count()方法来做到这一点,但这似乎需要一个库函数。我只是不确定如何搜索它,如果有的话。

标签: python-3.x

解决方案


是的,您可以使用itertools.groupby

from itertools import groupby
a = "000111010010111"
result = ["".join(list(group)) for key, group in groupby(a)]

发生了什么?我们曾经itertools.groupby对连续的术语进行分组。每次关键元素更改时都会创建一个新组(在您的示例中,当 0 变为 1 或 1 变为 0 时)。然后连接内部列表以达到您想要的输出。

输出:

['000', '111', '0', '1', '00', '1', '0', '111']

这适用于任何字符串(不仅仅是 1 和 0),并将根据项目的连续出现将它们组合在一起。


推荐阅读