擅长:python、mysql、java
<p>这个问题是<a href="https://docs.python.org/2/library/itertools.html#itertools.groupby" rel="nofollow noreferrer">itertools.groupby</a>的理想问题</p>
<p><strong>实施</strong></p>
<pre><code>from itertools import groupby
''.join('{}{}'.format(len(list(g)), 'DM'[k])
for k, g in groupby(seq, key = str.isalpha))
</code></pre>
<p><strong>输出</strong>
“4M4D5M5D1M3D”</p>
<p><strong>说明</strong></p>
<p>值得注意的是,关键功能在这里至关重要。根据是否是字母表对序列进行分组。一旦完成,就应该直接计算每个组的大小,并从关键元素中找出组的类型。在</p>
<p><strong>对代码的一些解释</strong></p>
<ul>
<li><code>'DM'[k]</code>:这只是表示<code>"M" if k == True else "D"</code>的一种巧妙方式</li>
<li><code>len(list(g))</code>:确定每个组的大小。或者,它可以写成<code>sum(1 for e in g)</code></li>
<li><code>'{}{}'.format</code>:字符串格式,用于创建连续频率和类型的连接</li>
<li><code>''.join(</code>:将列表元素作为字符串序列联接。在</li>
</ul>