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)
)  
4

4 回答 4

2

像这样:

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

>返回 a bool,它等价于0or 1

于 2013-02-27T19:02:45.733 回答
2

代码类似于详细格式

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

除了整个表达式被包装为生成器表达式并传递给内置 sum

嵌套循环结构从左到右读取,因此展开为

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

计算结果为布尔值 True 或 False 的 Condition 被汇总。因此,您最终会计算条件评估为 True 的所有实例

于 2013-02-27T19:03:10.883 回答
2

内部循环基于两个嵌套循环生成布尔值 (True和)。False在 Python 中,布尔值是 的子类,当求和时分别int充当1和和0TrueFalse

因此,您可以将其重写为:

numInversions = 0
for i in range(16):
    for j in range(i):
        if state.index(START[j]) > state.index(START[i]):
            numInversions += 1
于 2013-02-27T19:04:07.360 回答
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;
    }
  }
}
于 2013-02-27T19:04:55.427 回答