在循环中直到该点的最小列表

时间:2014-09-11 15:47:57

标签: python list min

我有一个包含2个数字的元组列表,如下所示。我基本上需要知道当前列表中的最小值,希望输出类似l2的内容。

l = [(30, -182), (55, -160), (72, -143), (92, -183)] 
l2 = [(30, -182), (55, -182), (72, -182), (92, -183)]

我尝试使用枚举但仍然遇到:

ValueError: min() arg is an empty sequence

到目前为止我使用的代码:

for i,(ss,en) in enumerate(sdat):
    print ss, min(x[1] for x in sdat[:i])

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:3)

嗯,你有点困惑。

for i,(ss,en) in enumerate(sdat):

只要你能保留历史记录,你就不需要索引,所以这是你的第一个暗示。

    print ss, min(x[1] for x in sdat[:i])

您每次都重新运行 min(错误地);比较两个数字需要做很多工作。

只需手动执行此操作:

sdat = [(30, -182), (55, -160), (72, -143), (92, -183)] 

if sdat:
    ss, en = sdat[0]

for ss, new_en in sdat:
    if new_en < en:
        en = new_en
    print((ss, en))

#>>> (30, -182)
#>>> (55, -182)
#>>> (72, -182)
#>>> (92, -183)

另外,为了证明我有功能和东西,这就是我实际做的事情:

from itertools import accumulate

def oddmin(a, b):
    return b[0], min(a[1], b[1])

accumulate(l, oddmin)

需要3.3及以上,所以这对Jsg91不起作用。