反转的数组切片包括第一个元素

时间:2018-04-13 07:54:34

标签: python arrays slice

让我说我有:

import.sql

我希望得到一个反转片。假设我想要>>> a = [1, 2, 3, 4] start_idx = 1的第1和第0个元素:

stop_idx = 0

使用切片表示法:

[2, 1] 

我使用a[x:y:z] xyzstart_idx使用什么值?

我试过了:

stop_idx

分化:

这个问题是关于具有负步骤的切片,其中应包括开始和结束索引元素(如数学中的闭合间隔),并且动态计算切片结束索引。

Understanding Python's slice notation 是关于符号的通用通用问题:>>> a[start_idx:stop_idx:-1] [2] >>> a[start_idx:stop_idx-1:-1] [] xy在[x:y:z]中的含义。它没有提到逆转案例。

这个问题与其他标记的重复项有所不同,因为它处理反向切片开始和结束索引要么由变量而不是硬编码计算或给出的一般情况。

2 个答案:

答案 0 :(得分:3)

如果希望反转间隔在索引0处结束,则可以在切片时省略第二个索引。

a = [1, 2, 3, 4]
a[1::-1] # [2, 1]

通常,只要您的最终索引为零,您就希望将其替换为None,否则您希望将其减去。

由于索引算法,我们必须分别处理这些情况以与通常的切片行为一致。这可以用三元表达巧妙地完成。

def reversed_interval(lst, i=None, j=None):
    return lst[j:i - 1 if i else None:-1]

reversed_interval([1, 2, 3, 4], 0, 1) # [2, 1]

答案 1 :(得分:1)

以下是两种通用解决方案:

  1. 取向前切片然后反转它:

    z
  2. 基于this answer,使用否定步骤并在第一个元素之前停止1个元素(加上停止偏移量):

    >>> a[stop_idx:start_idx+1][::-1]
    [2, 1]
    
  3. 比较执行时间,第一个版本更快:

    >>> a[start_idx:stop_idx-len(a)-1:-1]
    [2, 1]