说我们有一个清单:
a = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
然后我想通过切掉列表中每个元素中的第一个元素来创建一个新列表:
b = a[][1:]
显然上面的内容不起作用,但我现在想要的是:
[[2, 3], [5, 6], [8, 9]]
当然我可以循环使用它,但我想知道的是,是否有可能以与我上面所做的错误方式相似的方式进行。另外,最好是用numpy做一个更好/更好的方法,在这种情况下,不需要通过切片我尝试的方式来完成它?
答案 0 :(得分:6)
您可以使用list comprehensions:
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]]
>>>
答案 1 :(得分: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
答案 2 :(得分:2)
在python 3中你也可以使用*
b = [x for _,*x in a]
这种方法更灵活,因为你可以保留内部列表的第一个和最后一个元素,无论列表有多长:
b = [first,last for first,*middle,last in a]