擅长:python、mysql、java
<pre><code>>>> from itertools import groupby
>>> a = ['2', '', '9', '24', '1', '7', '12', '4', '', '18', '13', '34', '3', '10']
>>> [list(items) for status, items in groupby(a, lambda v: v != '') if status]
[['2'], ['9', '24', '1', '7', '12', '4'], ['18', '13', '34', '3', '10']]
</code></pre>
<p><code>groupby</code>接受一个iterable和一个函数,并根据函数的返回值返回分组到集合中的项。本例检查返回值是否为<code>True</code>,然后显式输出列表列表(正如您在示例中所希望的那样)。你知道吗</p>
<p><em>Edit</em>:下面是一个可读性稍高的版本,由@JonClements在注释中建议(使用字符串强制转换到<code>bool</code>而不是<code>lambda</code>函数):</p>
<pre><code>[list(g) for k, g in groupby(a, bool) if k]
</code></pre>
<p>如果不需要明确的列表,还可以执行以下操作:</p>
<pre><code>>>> for k, v in groupby(a, bool):
... if k:
... # do something with each group of values (v)
...
</code></pre>