擅长:python、mysql、java
<p>这是你能得到的最有效的方法,而且非常简单:</p>
<pre><code>tokens = [
[46565], [44460], [73, 2062], [1616, 338],
[9424, 24899], [1820, 11268], [43533, 5356],
[9930, 1053], [260, 259, 1151],
[83, 31840, 292, 3826]
]
groups = {}
for sublist in tokens:
groups.setdefault(len(sublist), []).append(sublist)
</code></pre>
<p>在此运行之后,<code>groups</code>将是一个字典,其中包含子列表长度的键和该长度的所有子列表的值,它们的顺序与在<code>tokens</code>中找到的顺序相同。然后,如果需要(<code>a = groups[1]</code>,等等),您可以将这些条目分配给命名变量,但是对于大多数工作流,您最好直接使用<code>groups</code>字典,因为这概括了解决方案(如果有一个0长度的列表怎么办?15项列表怎么办?)</p>
<p>使用单行列表理解无法做到这一点,因为您需要对每个输入值进行不同的聚类。对于聚合(像这样),最好的解决方案几乎总是在输入数据上运行<code>for</code>循环,并在输出字典中创建或更新条目</p>
<p>字典的<code>.setdefault</code>方法对于这种模式也非常有用,因为它省去了在更新条目之前检查条目是否存在的麻烦。或者,您可以使用<code>groups = collections.defaultdict(list)</code>,然后通过<code>groups[len(sublist)].append(sublist)</code>更新它</p>