(语法)获取两个列表之间最大差异的索引(在 1 行中)

(Syntax) Getting the index of the biggest difference between two lists (in 1 line)

我知道这可以在 for 循环中轻松完成,但我认为必须有一种直观的方法可以在一行中完成此操作。如需更多解释 - 您将获得两个列表,“juice”和“capacity”。 juice 显示某个索引有多少 juice,capacity 显示索引的容量。我试图找到剩余容量最多的索引。所以我试图通过这样做来做到这一点:

maxCap = max(capacity[i] - juice[i] for i in range (0, N - 1))

但这当然不会保存索引。如何将 maxCap 分配给生成我所写的 maxCap 的“i”?

maxCap = max(capacity[i] - juice[i] for i in range (0, N - 1))

同样的事情可以通过这种方式更简单地完成(虽然我不明白 N-1 部分,所以我忽略它):

maxCap = max(c - j for c, j in zip(capacity, juice))

不过,这给出了结果,而不是索引。要找到索引,max 必须通过 i 值,而不是计算结果,但最大化结果,像这样:

max_index = max(range(N), key=lambda i: capacity[i] - juice[i])

另一方面,如果您追求效率,这对 numpy 来说是一件好事。如果juicecapacity都是numpy数组,那么可以这样做:

max_diff = (a - b).max()
max_index = (a - b).argmax()

您可以使用 reduce:

import functools
remainings = [capacity[i] - juice[i] for i in range (0, len(capacity) - 1)]
maxCap = functools.reduce(lambda acc, cur: acc if remainings[acc] > remainings[cur] else cur, range(len(remainings)), 0)

Reduce 遍历 iterable 和 returns 由给定的 reducer 函数确定的单个结果。