2015-10-06 80 views
1

我有一個數據列表,我試圖從python中找到最大值。我當前的代碼將遍歷數據並呈現所有可能的數據組合,但我無法弄清楚如何從結果中渲染最大值。在Python循環中尋找最大值

下面是我的當前設置:

street = %sql SELECT * FROM streets 

for i in range(len(flight)): 
    for j in range(len(flight)): 
     for k in range(len(flight)): 
      A = flight[i][2] 
      B = flight[k][2] 
      num = flight[i][4] , flight[j][4] , flight[k][4] 
      numsum = sum(num) 
      print A, B, numsum 

印刷flight將呈現以下

+----+-----------+----------------------+----------------------+---+ 
| id | flight |  Start   |   End   |dis| 
+----+-----------+----------------------+----------------------+---+ 
| 0 |  w  |  SFO   |   DEN   | 4 | 
| 1 |  e  |  DEN   |   NYC   | 7 | 
| 1 |  e  |  DEN   |   ORD   | 7 | 

但是最大與拋出下面的錯誤。

--------------------------------------------------------------------------- 
TypeError         Traceback (most recent call last) 
<ipython-input-283-770cd29ebd83> in <module>() 
     8    num = street[i][4] , street[j][4] , street[k][4] 
     9    numsum = sum(num) 
---> 10    print A, B, max(numsum) 
    11 

TypeError: 'int' object is not iterable 

如果我刪除從數據庫將打印的最後一行一切最大。例如:

SFO ORD 35 
DEN JFK 12 
SFO JFK 94 
LAX DEN 54 
... 

有人可以幫助我弄清楚如何在numsum得到最大值所以結果打印這樣的:

SFO JFK 94 

提前感謝!

+1

您的錯誤與您列出的代碼不匹配。請顯示您正在運行的**精確**代碼。 – MattDMo

+0

'numsum'看起來像什麼?你能發表一段代碼來定義一個例子嗎? – rofls

+1

你能提供一個示例輸入和預期輸出! – praba230890

回答

1

你沒有做你想做的事情。你的算法沒有經過深思熟慮。看看這樣說:

for each_item in whatever_iterator: 
    a = each_item[some_element] 
    b = each_item[another_element] 
    num = some, other, numbers 
    sumnum = sum(num) # hey that was easy! 
    print a, b, sumnum # every time through, let's print it! 

無處這是否找到最大的。爲了做到這一點,你會想遍歷並保存current_max = max(current_max, new_value)

看起來像你希望做的是:

max_sumnum = (0, 0, 0) 
for i, j, k in itertools.product(len(x), repeat=3): 
    num = x[i][4], x[j][4], x[???][1][k][4] 
    cur_sumnum = x[i][2], x[k][2], sum(num) 
    max_sumnum = max(max_numsum, cur_sumnum, key=lambda tup: tup[2]) 
print max_sumnum 

我用itertools.product這裏,因爲它是一個偉大的快捷方式進行嵌套循環。

for i in range(3): 
    for j in range(5): 
     for k in range(100): 
      for m in range(2): 
       foo(i, j, k, m) 

# equivalent to.... 
for i, j, k, m in itertools.product(range(3), range(5), 
            range(100), range(2)): 

而且我使用repeat關鍵字,因爲您正在做一堆相同的循環。

for i in range(3): 
    for j in range(3): 
     for k in range(3): 

# equivalent to.... 
for i, j, k in itertools.product(range(3), repeat=3):