2013-07-10 104 views
1

作爲一種簡單的方法來測試拉出一個大的地形設置,輸入在我的節目一個二維表的某些元素的正確方式,我把下面的到Python殼牌:從2D python列表中拉出某些元素?

->>>test = [ [1,2,3],[4,5,6],[7,8,9] ] 

,並在努力來測試它,我得到這個:

->>>test1 = test[:][2] 

->>>test1 

[7, 8, 9] 

從輸入test[:][2]我預計TEST1返回[3,6,9]

有人能向我解釋爲什麼我[7,8,9]呢?

此外,如果你能解釋我將如何得到[3,6,9]的輸出?我知道我可以只說以下內容:

>>>test1 = [ test[0][2], test[1][2], test[2][2] ] 

,但如果我在我的程序的情況下寫的,這條線將是程較長且難以維護。如果比上面列出的方式更容易獲得[3,6,9],我將非常感謝您獲得該信息的一些見解。

回答

5

爲標準的Python,你可以這樣做:

>>> test = [[1,2,3],[4,5,6],[7,8,9]] 
>>> [x[2] for x in test] 
[3, 6, 9] 
>>> 

test1 = test[:][2],這是因爲test[:]只是等於test編輯:實際上,它是test精確副本,而不是同一個列表

也看看numpy庫。

+2

更具體地說,'測試[:]'是*副本*'test',不只是一個參考...例如,如果你這樣做'a = test','a'和'test'仍然會引用相同的列表,但現在使用'a = test [:]','a'和'test'指向不同的列表。 – SethMMorton

+0

是的,你是對的,忘記提及,我的意思是,爲了用戶的目的,它實際上等於測試:) –

+1

我討厭它當人們挑選我的答案,所以對此感到抱歉:)我只是認爲,在這種特殊情況下解釋爲什麼這個符號首先存在可能是有用的。 – SethMMorton

0

test[:]返回test的副本,所以[[1,2,3],[4,5,6],[7,8,9]]。所以test[:][2][7,8,9]。 使用列表comprehesion你可以得到你想要什麼輕鬆:

>>> [x[2] for x in test] 
[3, 6, 9] 
+0

我並不完全理解這種語法是如何工作的,但我曾經見過類似的奇怪東西。我可能會寫更多的像在測試x:print x [2] – Max