使用元组创建切片

时间:2011-08-15 21:54:09

标签: python arrays python-3.x tuples slice

在python中有没有办法使用元组作为切片的索引? 以下内容无效:

>>> a = range(20)
>>> b = (5, 12)   # my slice indices
>>> a[b]          # not valid
>>> a[slice(b)]   # not valid
>>> a[b[0]:b[1]] # is an awkward syntax
[5, 6, 7, 8, 9, 10, 11]
>>> b1, b2 = b
>>> a[b1:b2]      # looks a bit cleaner
[5, 6, 7, 8, 9, 10, 11]

这似乎是一种合理的pythonic语法,所以我很惊讶我不能这样做。

(更新) 解决方案原来是:

>>> a[slice(*b)]
[5, 6, 7, 8, 9, 10, 11]

4 个答案:

答案 0 :(得分:36)

您可以使用Python的*args语法:

>>> a = range(20)
>>> b = (5, 12)
>>> a[slice(*b)]
[5, 6, 7, 8, 9, 10, 11]

基本上,您告诉Python将元组b解压缩到单个元素中,并将每个元素作为单独的参数传递给slice()函数。

答案 1 :(得分:10)

a[slice(*b)]怎么样?

这是否足够pythonic?

答案 2 :(得分:4)

slice最多需要三个参数,但你只给它一个带元组的参数。你需要做的是让python解压缩它,如下:

a[slice(*b)]

答案 3 :(得分:2)

只缺少一个小角色;)

In [2]: a = range(20)

In [3]: b = (5, 12)

In [4]: a[slice(*b)]
Out[4]: [5, 6, 7, 8, 9, 10, 11