1

假设我们有一个列表:

a = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]

然后我想通过切掉列表中每个元素的第一个元素来创建一个新列表:

b = a[][1:]

显然上述方法不起作用,但我现在想要的 b 是:

[[2, 3], [5, 6], [8, 9]]

当然,我可以循环浏览它,但我只想知道是否有可能以与我在上面错误地尝试做的任何类似的方式来做。此外,最好有一个更好/更好的方法来使用 numpy 执行此操作,在这种情况下,它不需要通过切片我尝试这样做的方式来完成?

4

3 回答 3

6

您可以使用列表推导

b = [x[1:] for x in a]

演示:

>>> a = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
>>> b = [x[1:] for x in a]
>>> b
[[2, 3], [5, 6], [8, 9]]
>>>
于 2013-10-21T04:44:17.093 回答
5

使用 numpy 索引/切片表示法,您可以使用逗号分隔每个维度的切片:

import numpy as np
a = np.array([[1,2,3],[1,2,3],[1,2,3]])
print a[:,1:]

输出:

[[2 3]
 [2 3]
 [2 3]]

有关 numpy 索引的更多信息:http: //docs.scipy.org/doc/numpy/reference/arrays.indexing.html

于 2013-10-21T04:54:47.927 回答
2

在 python 3 中你也可以使用 *

b = [x for _,*x in a]

这种方法更灵活,例如,无论列表有多长,您都可以保留内部列表的第一个和最后一个元素:

b = [first,last for first,*middle,last in a]
于 2013-10-21T08:14:12.257 回答