如何进行2D切片?

时间:2017-03-22 07:16:32

标签: python python-3.x slice

我试图做我认为应该简单的事情:

我制作了一个2D列表:

a = [[1,5],[2,6],[3,7]]

我想滑出第一个column并尝试:

1)

a[:,0]
...
TypeError: list indices must be integers or slices, not tuple

2)

a[:,0:1]
...
TypeError: list indices must be integers or slices, not tuple

3)

a[:][0]
[1, 5]

4)

a[0][:]
[1, 5]

5)得到了它,但这是这样做的吗?

 aa[0] for aa in a

使用numpy这很简单,但Python方式是什么?

3 个答案:

答案 0 :(得分:5)

a[:, 0]这样的2D切片仅适用于NumPy数组,不适用于列表。

但是,您可以使用zip(*a)转置(行成为列,反之亦然)嵌套列表。转置后,只需切出第一行:

a = [[1,5],[2,6],[3,7]]
print zip(*a)           # [(1, 2, 3), (5, 6, 7)]
print list(zip(*a)[0])  #  [1, 2, 3]

答案 1 :(得分:0)

使用[x[0] for x in a]是明确而恰当的方式。

答案 2 :(得分:0)

您在数字1和2中尝试做的是在numpy数组中(或类似于pandas数据帧),但不适用于基本的python列表。如果您想使用基本的python列表,请在您的问题的评论中查看@ cricket_007的答案。

使用numpy的原因之一就是这样 - 它可以更容易地切割具有多个维度的数组