擅长:python、mysql、java
<p>一种方法是使用<code>itertools.groupby</code>将字符单独分组,并使用<code>zip</code>将其解包并迭代n次,因为n是最小组中的字符数(即字符数最少的组)</p>
<pre class="lang-py prettyprint-override"><code>from itertools import groupby
'aaaaaaappppppprrrrrriiiiiilll'
result = ''
for each in zip(*[list(g) for k, g in groupby('aaaaaaappppppprrrrrriiiiiilll')]):
result += ''.join(each)
# result = 'aprilaprilapril'
</code></pre>
<p>另一种可能的解决方案是创建一个自定义计数器,用于计算每个唯一的字符序列(请注意,此方法仅适用于Python 3.6+,对于较低版本的Python,不保证字典的顺序):</p>
<pre class="lang-py prettyprint-override"><code>def getCounts(strng):
if not strng:
return [], 0
counts = {}
current = strng[0]
for c in strng:
if c in counts.keys():
if current==c:
counts[c] += 1
else:
current = c
counts[c] = 1
return counts.keys(), min(counts.values())
result = ''
counts=getCounts('aaaaaaappppppprrrrrriiiiiilll')
for i in range(counts[1]):
result += ''.join(counts[0])
# result = 'aprilaprilapril'
</code></pre>