这究竟是如何工作sum()?

时间:2013-02-27 19:01:00

标签: java python sum

这是在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 个答案:

答案 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,相当于01

答案 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)

内部循环基于两个嵌套循环生成布尔值(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

答案 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;
    }
  }
}