支持空列表的Python嵌套列表最长列表求解方案
解决嵌套列表空输入时获取最长列表的问题
这问题我之前踩过坑!原来的max(sorted(lst_of_lsts, key = len))写法确实在输入空列表时会抛出ValueError: max() arg is an empty sequence,因为max()无法处理空序列。这里有几个实用的解决方案,既能支持空列表场景返回空列表,还能优化效率:
方案1:利用max()的default参数(推荐,Python 3.4+)
直接给max()添加default参数,省去先排序的步骤(排序是O(n log n),而直接用max是O(n),效率更高):
max(lst_of_lsts, key=len, default=[])
当lst_of_lsts为空时,default参数会触发,直接返回空列表;非空时则正常返回最长的子列表。
方案2:条件判断兼容老版本Python
如果你还在使用Python 3.4之前的版本,max()没有default参数,可以用简单的条件判断:
max(lst_of_lsts, key=len) if lst_of_lsts else []
同样,这里也去掉了没必要的sorted操作——毕竟我们只需要最长的那个元素,排序完全是多余的步骤。
如果坚持要用原来的排序逻辑(虽然不推荐),也可以改成:
max(sorted(lst_of_lsts, key=len)) if lst_of_lsts else []
为什么原代码会报错?
当输入的lst_of_lsts是空列表时,sorted(lst_of_lsts, key=len)返回的还是空列表,此时调用max()就会因为传入了空序列而抛出ValueError,所以核心就是要给空输入的情况加一个兜底返回值。
内容的提问来源于stack exchange,提问作者Joylove
相关产品推荐
相关产品推荐

