擅长:python、mysql、java
<p>你可以使用<code>groupby</code>,这正是你想要的:</p>
<pre><code>from itertools import groupby
def lookandsay(n):
return ''.join( str(len(list(g))) + k for k, g in groupby(n))
>>> lookandsay('1')
'11'
>>> lookandsay('1A2b41')
'111A121b1411'
>>> lookandsay(lookandsay('1A2b41'))
'311A1112111b111421'
</code></pre>
<p><code>groupby</code>从iterable对象返回连续的键和组。键是为每个元素计算的函数,如果未指定,则为标识函数(如上所述)。这个组是一个迭代器-当键函数的值改变时会生成一个新的组。例如,根据文献记载:</p>
<pre><code># [k for k, g in groupby('AAAABBBCCDAABBB')] --> A B C D A B
# [list(g) for k, g in groupby('AAAABBBCCD')] --> AAAA BBB CC D
</code></pre>