<p>这里有一个函数可以满足您的需要:</p>
<pre><code>from itertools import accumulate
def divide_into_schedule(input_list, schedule):
if schedule[0] != 0:
schedule.insert(0, 0)
indices = list(accumulate(schedule))
output_list = [list() for _ in input_list]
for start_index, end_index in zip(indices, indices[1:]):
for input_sublist, output_sublist in zip(input_list, output_list):
output_sublist.append(input_sublist[start_index:end_index])
return output_list
</code></pre>
<p>这里的核心思想是:</p>
<ul>
<li>通过累加<code>schedule</code>列表,创建要从每个子列表中获取的索引列表</李>
<li>初始化与输入列表具有相同结构的输出列表</李>
<li>压缩索引列表和相同的索引列表,并移动元素(<code>indices[1:]</code>),使值成为从每个子列表中选择的开始索引和结束索引</李>
<li>压缩<code>input_list</code>和<code>output_list</code>中的每个子列表</李>
<li>使用开始/结束索引,将所需子列表从<code>input_list</code>复制粘贴到<code>output_list</code></李>
</ul>
<p>通过传递输入列表和时间表来调用它,如下所示:</p>
<pre><code>input_list = [['CS105', 'ENG101', 'MATH101', 'GER', 'ENG102', 'CS230', 'MATH120', 'GER', 'CS205', 'FREE', 'GER', 'CS106', 'CS215', 'CS107', 'ENG204', 'GER', 'MATH220', 'CS300', 'CS206', 'CS306', 'GER', 'FREE', 'CS312', 'CS450', 'GER', 'CS321', 'FREE', 'CS325', 'GER', 'CS322', 'MAJOR', 'CS310', 'STAT205', '', 'CS443', 'CS412', 'CS421', 'GER', 'CS444', 'FREE', 'FREE','','',''], ['CS105', 'ENG101', 'MATH101', 'GER', 'ENG102', 'CS230', 'MATH120', 'GER', 'CS205', 'FREE', 'GER', 'CS106', 'CS215', 'CS107', 'ENG204', 'GER', 'MATH220', 'CS300', 'CS206', 'CS306', 'GER', 'FREE', 'CS312', 'CS450', 'GER', 'CS321', 'FREE', 'CS325', 'GER', 'CS322', 'MAJOR', 'CS310', 'STAT205', '', 'CS443', 'CS412', 'CS421', 'GER', 'CS444', 'FREE', 'FREE','','',''],...]
schedule = [4, 4, 2, 1, 5, 4, 2, 1, 5, 4, 2, 1, 5, 4, 2, 1]
output_list = divide_into_schedule(input_list, schedule)
</code></pre>
<p>由于我在评论中提到的打字错误,结果与您期望的输出不完全相同,但我相信它能满足您的需求</p>