2013-10-21 104 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] 
相關問題