<p>这就是我想到的。这是一个类似于你的算法和SorousH Bakhtiary的答案,但应该没有字数错误,我认为它更容易阅读</p>
<p>如果我们使用前一个子列表中的最后一个短语开始新的子列表,并且在不突破单词限制的情况下无法添加下一个短语,那么这也会引发一个错误。如果有两个连续的短语具有>;8个字-如果你能确定这永远不会发生,那么你可以省略这一部分</p>
<pre><code>def count_words(phrase):
return len(phrase.split())
def sublists_with_max_words(main_list, max_words=16):
output_sublists = []
current_sublist = []
current_sublist_words = 0
for phrase in main_list:
words_in_phrase = count_words(phrase)
if (current_sublist_words + words_in_phrase) > max_words:
# If we cannot add the phrase to the sublist without breaking
# the word limit, then add the sublist to the output
output_sublists.append(current_sublist)
# Start a new sublist with the last phrase we added
last_phrase = current_sublist[-1]
current_sublist = [last_phrase]
current_sublist_words = count_words(last_phrase)
# If we cannot add the phrase to the new sublist either, then raise
# an exception as we cannot continue without breaking the word limit
if (current_sublist_words + words_in_phrase) > max_words:
raise ValueError(
f"Cannot add '{phrase}' ({words_in_phrase} words) to a new"
f" sublist with {current_sublist_words} words"
)
# Add the current phrase to the sublist
current_sublist.append(phrase)
current_sublist_words += words_in_phrase
# At the end of the loop, add the working sublist to the output
output_sublists.append(current_sublist)
return output_sublists
print(sublists_with_max_words(qq))
</code></pre>