用切片对象替换列表的第i个元素

时间:2015-02-12 17:06:48

标签: python list

这是一个非常简单的问题,但我无法在任何地方找到文档。我想将列表的i元素更改为切片(“文字冒号”,如[:]中所示)。有没有办法做到这一点?

我试过这样做:

indexlist = [0] * dim
indexlist[i] = :

这会引发语法错误,但我认为它可以解决我想要做的事情。

1 个答案:

答案 0 :(得分:6)

通过"字面冒号"你似乎是指slice object

例如:

your_list[i] = slice(None)

为了解释发生了什么,切片表达式实际上是作为切片对象(或整数等)的元组传递的。

something[start:stop:step]相当于something[slice(start, stop, step)]。同样,something[:]相当于something[slice(None)]

切片是通过对象__getitem__ method实现的,所以这也等同于something.__getitem__(slice(start, stop, step))


因为您在评论中提到了numpy,所以您可能会看一下np.index_exp or np.s_。它允许您从索引中快速创建切片元组,并允许您查看发生的情况。

例如:

import numpy as np

print np.s_[:, 1:5, ::-1, ...]

的产率:

(slice(None, None, None), slice(1, 5, None), slice(None, None, -1), Ellipsis)

哪个是切片对象的元组,您可以存储然后直接用于切片对象。 (例如slices = np.s_[0, :, :]然后y = x[slices])。