擅长:python、mysql、java
<p>将两个列表串联起来,如<a href="https://stackoverflow.com/a/50692283/908494">Jonas's answer</a>,是最简单的解决方案,通常也是最好的解决方案。在</p>
<p>如果你担心做临时列表,你可以做一些稍微复杂一点的事情,比如:</p>
<pre><code>[elem for i, elem in enumerate(x)
if i in range(start1, stop1, step1) or i in range(start2, stop2, step2)]
</code></pre>
<p>…或:</p>
^{pr2}$
<p>然而,我预计其中任何一个都会慢得多,除非这两个子列表太大,以至于内存分配时间占据了所有事情,当然,它们要复杂得多,可读性也差得多。在</p>
<p>这两种解决方案的唯一真正优势是,如果您实际上不需要列表,则可以轻松地将它们转换为惰性迭代器:</p>
<pre><code>(elem for i, elem in enumerate(x)
if i in range(start1, stop1, step1) or i in range(start2, stop2, step2))
itertools.chain(itertools.islice(x, start1, stop1, step1),
itertools.islice(x, start2, stop2, step2))
</code></pre>
<p>(事实上,第二个是Jonas的答案的懒惰等价物:<code>islice(x, start1, stop1, step1)</code>和{<cd2>}做了相同的事情,<code>chain(a, b)</code>和{<cd4>}做了相同的事情。)</p>