2015-10-06 3 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): 
Смежные вопросы