我有一个数据列表,我试图通过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
提前致谢!
答案 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):