2015-08-21 118 views
2

我想在我的Pyhton腳本中做一個非常簡單的檢查,其中有6000列但只有3行數據在多個數組中。爲什麼thing [:] [0]等於thing [0] [:]?

爲了得到我的腳本正在做什麼的一些概述,我想在腳本中的某些點添加一些檢查,這些檢查將我的數組的幾列打印到我的linux終端窗口並與手動計算進行比較以確保我不會在任何地方犯錯。

如果我打印:print(NH3flux[0][0])print(NH3flux[1][0])我得到正確的數據。

如果我做了print(NH3flux[0][:])讓我的整個第一行(或者,如果你喜歡列)

的問題:如果我做一個print(NH3flux[:][0])我得到完全相同的結果爲print(NH3flux[0][:]),因爲我以爲我明白這混淆了我Python中的數組?

如果我代替我:與數字012我得到正確的數據,3崩潰的執行,由於某種原因:標誌不起作用。

我什麼都不明白?

編輯: 請注意,數字可能是字符串形式,因爲它們從數據庫中讀取,因此尚未轉換。對象的格式有希望不是這裏的問題。

print(NH3flux[0][0]) returns 0.00000 

print(NH3flux[1][0]) returns 0.00001 

print(NH3flux[2][0]) returns 0.00013 

print(NH3flux[3][0]) returns list index out of range as expected 

print(NH3flux[0][:]) returns '0.00000', '0.00000', '0.00003', '0.00002' 

...等

+0

請a)添加您提供的每個'print'語句的輸出。 b)準確解釋你得到的結果與你認爲會得到的結果有什麼不同c)包括你使用'3'和':'時得到的錯誤: – scytale

+0

這些是嵌套列表。它們不是以這種方式進行索引,而是NumPy的數組。如果NH3通量是這樣一個對象,那麼如果「NH3通量[0:]」是第一行(如果不是翻轉行和列),則「NH3通量[:,0]」將是第一列。 –

+0

@vpJohan:請允許我提供一些標準建議:如果答案能解決您的問題,請點擊旁邊的大號複選標記(✓)並選擇性地對其進行投票表決(增加投票需要至少15聲望點)。 如果您發現其他答案有幫助,請投票給他們。接受和投票有助於未來的讀者。請參閱[相關幫助中心文章](http://stackoverflow.com/help/someone-answers)。如果您的問題尚未得到充分解答,請提供反饋。如果您認爲自己找到了最佳解決方案,請將其作爲答案和自我接受。 – mklement0

回答

4

thing[:]返回thing *的副本。

NH3flux[:][0]給你相同的對象NH3flux[0],並NH3flux[0][:]給你副本NH3flux[0]

原因NH3flux[:][0]看起來相同NH3flux[0][:]是因爲一個物體看起來與它的副本相同,所以當你使用它時* print

* 通常;對於listtuple和大多數其他想要遵循約定的事情。

1
NH3flux[:] 

選擇所有的列(假設你的矩陣是一個列表的列表); NH3flux[:][0]這是第一行 - 您的第一行。

0

print(NH3flux[0][:])print(NH3flux[0][:])選擇第一個子元素/行並製作淺度副本,print(NH3flux[:][0])製作整個列表的淺表副本並從列表中選擇第一行,以便始終訪問列表中的第一個子元素/行。

In [7]: l = [[1,2],[2,3]] 
In [8]: l[0] # first element 
Out[8]: [1, 2] 
In [9]: l[:] # whole list 
Out[9]: [[1, 2], [2, 3]] 
In [10]: l[0][:] # copy of first row 
Out[10]: [1, 2]  
In [11]: l[:][0] # shallow copy of whole list and getting first row 
Out[11]: [1, 2] 
0

我不確定你使用的數據是什麼,所以我只能假設。但是說你有這樣的東西:
val = [1,2],print(val [:])
這會給你在列表中的所有內容,現在如果你打印(val [:] [1]),你只有數字2,因爲第一個[:]給你所有的東西,然後[1]給你列表中的第二個項目。
如果你做了一個列表,如val = [1,2,[3,4]]
然後打印(val [2] [:])會給你3,4。這聽起來像是你試圖打印出你的數據類型範圍之外的東西,但不知道你正在試圖解析的數據是什麼。