2013-02-27 85 views
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) 
) 
+0

我非常理解,但怎麼>運營商的作品,從中 – JRowan 2013-02-27 19:02:49

回答

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

+0

結果謝謝你,我一直在這麼久,四處尋找瘋狂,感謝 – JRowan 2013-02-27 19:04:08

+0

多數民衆贊成那實際上是我在想什麼,我只是檢查自己之前,我去編碼,再次感謝 – JRowan 2013-02-27 19:09:46

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的實例

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