空列表的安全 max() 函数

新手上路,请多包涵

评估,

 max_val = max(a)

会导致错误,

 ValueError: max() arg is an empty sequence

除了 try , except 捕获之外,是否有更好的方法来防止此错误?

 a = []
try:
    max_val = max(a)
except ValueError:
    max_val = default

原文由 Alexander McFarlane 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1k
2 个回答

在 Python 3.4+ 中,您可以使用 default 关键字参数

 >>> max([], default=99)
99

在较低版本中,您可以使用 or

 >>> max([] or [99])
99

注意:第二种方法不适用于所有可迭代对象。特别是对于只产生真值的迭代器。

 >>> max(iter([]) or 0)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: max() arg is an empty sequence

原文由 falsetru 发布,翻译遵循 CC BY-SA 3.0 许可协议

在 Python 3.4 之前的版本中,您可以使用 itertools.chain() 向可能为空的序列添加另一个值。这将处理任何空的可迭代对象,但请注意,它与提供 default 参数并不完全相同,因为始终包含额外值:

 >>> from itertools import chain
>>> max(chain([42], []))
42

但在 Python 3.4 中,如果序列不为空,则忽略默认值:

 >>> max([3], default=42)
3

原文由 Duncan 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题