2013-07-26 25 views
3

我讀了一些代碼,我看到" list[:,i] for i in range(0,list))......"「[:,]」列表切片python,這是什麼意思?

我感到迷惑,什麼逗號在那裏做,:,和谷歌提供,你不能谷歌標點符號沒有答案。

任何幫助非常感謝!

+3

谷歌搜索列表切割python逗號作品。只是提到它,因爲你提到了尋找這個問題的困難。 – keyser

+0

這是一個奇怪的例子,如果變量'list'是一個多維的numpy數組(如Martijn所示),最後一位'for range in(0,list)'沒有意義。還有一個名爲'list'的變量是不好的,因爲它隱藏了Python列表函數... –

回答

10

您正在查看numpy多維陣列切片。

逗號標誌着一個元組,它讀作[(:, i)],其numpy數組作爲解釋:第一尺寸要被切斷的端至端(全部行)與:,則對於每一行,i選擇一個柱。

請參閱numpy教程中的Indexing, Slicing and Iterating

+0

似乎有一種奇怪的做法......'列中的列'T' –

+0

@JonClements:假設數組是兩列的,維。否則,您需要'numpy.swapaxes()'交換第二個和第一個軸。 –

+0

@SvenMarnach:對;我的新娘與numpy在這裏閃耀。 –

2

沒有試圖挖掘Martijn的答案,但我對此感到困惑,所以給自己寫了一個小小的getitem資源管理器,顯示正在發生的事情。 Python給出了一個切片對象,它可以讓對象決定如何處理getitem。多維數組也是元組。

>>> class X(object): 
...  def __getitem__(self, name): 
...    print type(name),name 
... 
>>> x=X() 
>>> x[:,2] 
<type 'tuple'> (slice(None, None, None), 2) 
>>> x[1,2,3,4] 
<type 'tuple'> (1, 2, 3, 4) 
>>> 
+0

+1,這表明numpy數組以外的對象可以是用元組索引(請注意,OP不包含numpy標籤)。仍然這個'x'導致錯誤''我在範圍內(0,x)'。 OP應該張貼更多他/她正在閱讀的代碼... –