回答此问题可获得 20 贡献值,回答如果被采纳可获得 50 分。
<p>假设有一个列表X和另一个列表<code>num_items</code>指定子列表中应包含的项目数,我可以手动拆分列表,如下所示:</p>
<pre><code>>>> x = list(range(10))
>>> x
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> num_items = [4, 4, 2]
>>> slice1 = x[:num_items[0]]
>>> slice2 = x[len(slice1):len(slice1)+num_items[1]]
>>> slice3 = x[len(slice1)+len(slice2):]
>>> slice1, slice2, slice3
([0, 1, 2, 3], [4, 5, 6, 7], [8, 9])
</code></pre>
<p>有两种情况下,最后几个片段可能会出现问题,例如,如果我手动编写了3个片段的代码,那么可以使用空列表解决这一问题:</p>
<pre><code>>>> num_items = [9, 1, 1]
>>> slice1 = x[:num_items[0]]
>>> slice2 = x[len(slice1):len(slice1)+num_items[1]]
>>> slice3 = x[len(slice1)+len(slice2):]
>>> slice1, slice2, slice3
([0, 1, 2, 3, 4, 5, 6, 7, 8], [9], [])
</code></pre>
<p>如果有4个切片,例如:</p>
<pre><code>>>> num_items = [9, 1, 1, 2]
>>> slice1 = x[:num_items[0]]
>>> slice2 = x[len(slice1):len(slice1)+num_items[1]]
>>> slice3 = x[len(slice1)+len(slice2):len(slice1)+len(slice2)+num_items[2]]
>>> slice4 = x[len(slice1)+len(slice2)+len(slice3): len(slice)+len(slice2)+len(slice3)+num_items[3]]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: object of type 'type' has no len()
</code></pre>
<p>期望的输出是将空列表添加到第4个片段,即:</p>
<pre><code>>>> slice1, slice2, slice3, slice4
([0, 1, 2, 3, 4, 5, 6, 7, 8], [9], [], [])
</code></pre>
<p>如果<code>num_items</code>需要小于X长度的项,只需返回<code>num_items</code>的和,即</p>
<pre><code>>>> num_items = [4, 4]
>>> slice1, slice2
([0, 1, 2, 3], [4, 5, 6, 7])
</code></pre>
<p><strong>主要的问题是有没有一种方法可以在不手动编码分割的情况下分割切片?</strong>(解决了<code>num_items</code>请求的项目多于X的情况,在这种情况下,应该返回空的子列表)</p>
<p>请记住,X的长度可能相当大(即>;1000000000),但是<code>num_items</code>的长度范围从1到100=)</p>