2013-10-21 94 views
1
列表

说我们有一个清单:片远在每个(名单)第一个元素元素在Python

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

然后,我要创建通过在切离中的每个元素的第一个元素的新列表清单:

b = a[][1:] 

显然,上述不工作,但我想b现在要的是:

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

当然我可以通过它来循环,但我想知道的是,如果可以以类似的方式来做到这一点,就像我上面做错了那样。另外,最好是有一个更好/好的方式来做到这一点与numpy,在这种情况下,它不需要通过切片我试图做到这一点?

+0

在Python列表和numpy数组之间进行转换不是一个好主意会在这个地方 - 它需要相当多的CPU。你应该尽量减少这些转换。 –

+0

如果我已经将所有内容都放在numpy数组中,是不是指定一个numpy数组? –

+1

不,我的意思是,如果你正在从一个列表转换为一个numpy数组,只是为了完成切片然后再转换回列表。使用列表理解可能会更快,因为即使numpy slice非常快,来回转换速度非常慢。 –

回答

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

+1

你是对的,列表解析是一个好主意,但我特别指定我更喜欢这样做的一种很好的方式,而且你完全按照我想要的方式来做,所以我必须将其设置为接受的答案。非常感谢! –

5

您可以使用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]] 
>>> 
+0

你是对的,而且我对此有所了解,但是想要做到这一点而没有列表解析和循环等,我还指定我更喜欢一个numpy解决方案。不管怎么说,多谢拉! –

2

在Python 3,你也可以使用*

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

这种方法,因为你可以例如先走更加灵活的最后一个元素内部列表中,无论列表多长时间:

b = [first,last for first,*middle,last in a] 
相关问题