这是在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 :(得分: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
,相当于0
或1
。
答案 1 :(得分: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或False的条件求和。因此,您最终会计算条件评估为True的所有实例
答案 2 :(得分:2)
内部循环基于两个嵌套循环生成布尔值(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
答案 3 :(得分: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;
}
}
}