我有一个包含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])
非常感谢任何帮助!
答案 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不起作用。