这是在 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)
)
像这样:
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
,它等价于0
or 1
。
代码类似于详细格式
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 的所有实例
内部循环基于两个嵌套循环生成布尔值 (True
和)。False
在 Python 中,布尔值是 的子类,当求和时分别int
充当1
和和0
。True
False
因此,您可以将其重写为:
numInversions = 0
for i in range(16):
for j in range(i):
if state.index(START[j]) > state.index(START[i]):
numInversions += 1
在(伪)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;
}
}
}