擅长:python、mysql、java
<p>我将使用<code>itertools</code>模块中已有的工具:</p>
<pre><code>from itertools import chain, islice
def updater(one, two, divide):
# Similar to return one[:divide] + two[divide:]
return list(chain(islice(one, divide), islice(two, divide, None)))
</code></pre>
<p><code>islice(one, divide)</code>产生<code>one</code>的前5个元素;<code>islice(two, divide, None)</code>产生从<code>two</code>开始的第6个元素的所有元素。<code>chain</code>将两个迭代器连接在一起,<code>list</code>构建对结果的迭代,并从看到的元素构建一个列表。你知道吗</p>
<p>切片将在连接列表之前创建列表(部分)的副本。<code>islice</code>只返回一个迭代器,该迭代器只生成请求元素而不生成任何副本。这也适用于任意的iterables,而不仅仅是列表。你知道吗</p>
<p>您还可以将创建具体列表的决定推迟给调用者:</p>
<pre><code>def updater(one, two, divide):
return chain(islice(one, divide), islice(two, divide, None))
updated = list(updater(one, two, divide))
</code></pre>
<p>如果您实际上不需要在内存中存储结果的完整列表,例如如果您只计划对其进行迭代,那么这将非常有用:</p>
<pre><code>for x in updater(one, two, 5):
...
</code></pre>