2013-02-27 74 views
2

这是Python。我试图弄清楚这是如何工作的,所以我可以把它翻译成Java。这个工作究竟和多少()?

numInversions = sum(
    state.index(START[j]) > state.index(START[i]) 
    for i in range(16) for j in range(i) # each pair (i,j) 
) 
+0

我非常理解,但怎么>运营商的作品,从中 – JRowan 2013-02-27 19:02:49

回答

2

像这样:

numInversions = 0 
for i in range(16): 
    for j in range(i): 
     if state.index(START[j]) > state.index(START[i]): 
      numInversions += 1 

>的回报bool,这相当于01

+0

结果谢谢你,我一直在这么久,四处寻找疯狂,感谢 – JRowan 2013-02-27 19:04:08

+0

多数民众赞成那实际上是我在想什么,我只是检查自己之前,我去编码,再次感谢 – JRowan 2013-02-27 19:09:46

2

准则是类似于详细格式

numInversions = = 
for i in range(16): 
    for j in range(i): 
     if state.index(START[j]) > state.index(START[i]): 
      numInversions += 1 

除了整个表达式缠绕作为发电机表达并传递给内置的总和

嵌套循环结构是从左读向右移动至

for i in range(16): 
    for j in range(i): 

总结评估为布尔真或假的条件。因此,您最终将计算所有条件为True的实例

2

内部循环根据两个嵌套循环生成布尔值(TrueFalse)。在Python中,布尔值是int的一个子类,当求和时分别充当10,分别为TrueFalse

所以,你可以为改写这个:

numInversions = 0 
for i in range(16): 
    for j in range(i): 
     if state.index(START[j]) > state.index(START[i]): 
      numInversions += 1 
2

在(伪)的Java:

int numInversions = 0; 
for (int i = 0; i < 16; ++i) { 
    for (int j = 0; j < i; ++j) { 
    if (state.index(START[j]) > state.index(START[i])) { 
     ++numInversions; 
    } 
    } 
}