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 を返し>ます。bool01

于 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 に評価される条件が合計されます。したがって、条件がTrueと評価されるすべてのインスタンスをカウントすることになります

于 2013-02-27T19:03:10.883 に答える
2

内側のループは、2 つのネストされたループに基づいてブール値 (Trueおよび) を生成します。FalsePython では、ブール値は のサブクラスでintあり、合計すると、それぞれ1および0として機能します。TrueFalse

したがって、これを次のように書き換えることができます。

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 に答える