在python循环中查找最大值

时间:2015-10-06 02:05:04

标签: 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

如果我从最后一行删除max,将打印数据库中的所有内容。例如:

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

有人可以帮我弄清楚如何获得numsum中的最大值,所以结果如下所示:

 SFO JFK 94

提前致谢!

1 个答案:

答案 0 :(得分: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循环的一个很好的快捷方式。

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):