2013-03-11 70 views
0

我遇到了一段Python代碼,我可能想要適應Java的個人項目,但在理解操作時遇到一些困難。該片段包含以下:Python結構操作員澄清

F={} 
for stage in range(4): 

    if stage == 0: 
    F[stage]=[] 
    i=0 

    for j in range(i, len(words)+1): 
     F[stage].append([cost(i, j), 0]) 

這裏,cost是外部DEF,取入兩個整數值,並返回一個數學運算。

從我所知道的,F={}初始化一個類似於Java HashMap的字典,[]表示一個列表的初始化。

首先,我是糾正F[stage].append([cost(i, j), 0])裝置

  • 採取cost函數的整數值,
  • 創建具有兩個值,並
  • 列表追加它作爲一個單一容器的端F [舞臺]名單?

其次,以上代碼的這一行部分讓我難堪。

if F[stage-1][i][0] + cost(i, j) ... 

我解釋它的方式是

  • F[stage - 1]在位置
  • [i]檢索列表訪問子表容器和
  • [0]在第一個索引位置檢索值子列表

我在正確的跟蹤?

+0

請問您可以包含「代價」代碼嗎? – xxmbabanexx 2013-03-11 01:36:24

+2

你顯示的Python代碼確實令人困惑。例如,它循環了四個階段,但對1-3沒有任何作用......我不確定你是否真的想複製它,除非你已經刪除了更多。 – Blckknght 2013-03-11 01:39:44

+0

@Blckknght,有一些我沒有包含的代碼。我在這裏要做的是理解數據結構操作與Java相關的內容。實質上,這個問題更多地是Python代碼澄清的數據訪問和檢索問題。 – Jason 2013-03-11 01:53:36

回答

1

首先,我是糾正F [階段] .append([成本(I,J),0])是指

採取成本函數的整數值, 創建具有兩個值的列表和 將它作爲一個容器追加到F [stage]列表的末尾?


您的理解是正確的。 F [舞臺]將是一個列表清單。


我解釋它的方式是

F [階段 - 1]中檢索在該位置的列表
[I]訪問的子列表容器和
[0]在檢索值子列表的第一個索引位置


在我看來,那 F [臺]是結構的名單列表,:
[[什麼成本(我,j)返回,0],[什麼成本(我,j)返回,0] ....]
由於這裏我是0(或它改變?) F [階段1] [i] [0]是指最後一階段的成本(0,0)
它似乎是增加了當前階段某些最後階段的成本來確定某些事情。

2

則是問有關的線路,

if F[stage-1][i][0] + cost(i, j) ... 

似乎是在看從前一階段成本計算;它看起來幾乎就像尋找最佳下一步行動的路徑算法。我之所以說它是從前一階段的成本計算(顯然)是stage-1索引,以及當[cost(i, j), 0]附加到F[stage](列表)時,該列表的[0]元素是cost(i, j)。所以你說「[0]在子列表的第一個索引位置檢索值」是正確的,但它可能有助於知道它也特別檢索較早的成本結果。

在Java中,使用一個小類而不是兩個項目列表來代替成本和第二個參數,使用適當的命名字段和訪問器可能更習慣於使用。

對於F,您也可以使用數組而不是字典,因爲儘管Python代碼使用了字典,但它只是通過訪問數字階段鍵0-3來將它看作一個數組。

我想知道如果我們錯過了一些您希望轉換的上下文,但是,特別是if F[stage-1] ...行未包含在原始代碼段中。

+0

有一些我沒有包含的代碼。我在這裏要做的是理解數據結構操作與Java相關的內容。實質上,這個問題更多地是Python代碼澄清的數據訪問和檢索問題。 – Jason 2013-03-11 01:54:23

0

您對理解Python代碼所做的評論是正確的。當然,這取決於代碼的內容。但對於Python中的字典/目錄結構就可以開始瓦特/簡單的字典這樣

>>> tst = {'one':1, 'two':2} 
>>> tst 
{'two': 2, 'one': 1} 

現在取代的「一」的值w /嵌套列表

>>> tst['one'] = [1, ['a', 'b', 'c'], 3] 
>>> tst 
{'two': 2, 'one': [1, ['a', 'b', 'c'], 3]} 

現在得到到嵌套列表中的'c'

>>> tst['one'][1][2] 
'c' 

並且您可以通過添加更多嵌套數組來進一步實現它。如果我沒有弄錯Python中的任何列表都可以成爲「鋸齒狀陣列」