2013-03-11 61 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中的任何列表都可以成为“锯齿状阵列”