<p>当我们执行从左到右的迭代时,基于中间位置的推理是有效的:</p>
<pre><code>li = [10, 20, 55, 65, 75, 120, 1000]
print 'forward slicing li[2:5] ->',li[2:5]
# prints forward slicing li[2:5] -> [55, 65, 75]
</code></pre>
<p>因为位置2在20/55和位置5在75/120之间</p>
<p>是的。</p>
<p>但当我们进行从右到左的迭代时,它不起作用:</p>
<pre><code>li = [10, 20, 55, 65, 75, 120, 1000]
print li
print 'reverse slicing li[5:2:-1] ->',li[5:2:-1]
# prints reverse slicing li[5:2:-1] -> [120, 75, 65]
</code></pre>
<p><strong>我们必须把li[5:2:-1]看作:<br/>
从元素li[5]</strong>(即120)<strong>到未混合元素li[2]</strong>(即55)<br/>
也就是说<br/>
<strong>来自元素li[5]</strong>(即120)<strong>仅包括li[3]</strong>(即65)。</p>
<p>是的。</p>
<p>这使得危险的反向切割从最末端开始:</p>
<pre><code>li = [10, 20, 55, 65, 75, 120, 1000]
print li[ -1 : 2 : -1 ]
# prints [1000, 120, 75, 65] not [120, 75, 65, 55]
# the same as:
print li[ None : 2 : -1 ]
# prints [1000, 120, 75, 65]
print li[ : 2 : -1 ]
# prints [1000, 120, 75, 65]
</code></pre>
<p>以及</p>
<pre><code>li = [10, 20, 55, 65, 75, 120, 1000]
print li[ 4 : 0 : -1]
# prints [75, 65, 55, 20] , not [65, 55, 20, 10]
</code></pre>
<p>是的。</p>
<p>如果这样想有困难,防止错误的方法是</p>
<pre><code>print list(reversed(li[2:5]))
# prints [75, 65, 55]
print list(reversed(li[2:-1]))
# prints [120, 75, 65, 55]
print list(reversed(li[0:4]))
# prints [65, 55, 20, 10]
</code></pre>
<p>是的。</p>
<p>注意,只要包含第一个元素,获得反向切片的唯一方法是</p>
<pre><code>print li[ 4 : : -1]
</code></pre>
<p>代表</p>
<pre><code>print li[ 4 : None : -1]
</code></pre>