<p>由于其他人已经提供了有效的解决方案,下面是另一个有趣的方法,它是通过在每个<code>qq</code>元素和相应的累积字数之间的<strong>映射方案实现的</p>
<p>首先,创建映射dict:</p>
<pre><code>qq_map = {q: len(" ".join(qq[:n+1]).split()) for n, q in enumerate(qq)}
# {'blended e learning forumin planning': 5, 'difficulties of learning as forigen language': 11,
# 'difficulties of grammar': 14, 'students difficulties in grammar': 18,
# 'difficulties of english grammar': 22}
</code></pre>
<p>然后使用映射信息构建分组列表:</p>
<pre><code>qq = [[q for q in qq if qq_map[q] in range(i*16, (i+1)*16)] /
for i in range(-(-qq_map[qq[-1]] // 16))]
# [['blended e learning forumin planning', 'difficulties of learning as forigen language', 'difficulties of grammar'],
# ['students difficulties in grammar', 'difficulties of english grammar']]
</code></pre>
<blockquote>
<p>Note: <code>-(-qq_map[qq[-1]] // 16)</code> is an equivalent to <code>math.ceil(qq[-1] / 16)</code>. You can
replace it if you'd like a more concise and less 'arithmetic'
expression.</p>
</blockquote>
<p>最后,再次处理列表,以便将每个组的最后一个字符串推送到下一个组中(当然第一个字符串除外):</p>
<pre><code>qq = [[qq[i-1][-1]] + qq[i] if i != 0 else qq[i] for i in range(len(qq))]
# [['blended e learning forumin planning', 'difficulties of learning as forigen language', 'difficulties of grammar'],
# ['difficulties of grammar', 'students difficulties in grammar', 'difficulties of english grammar']]
</code></pre>