如何通过列表推导式检查多个列表长度是否超过指定阈值并触发异常
解决方案:用列表推导式检查列表长度并抛出异常
嘿,这个需求用列表推导式加上内置的any()函数就能轻松搞定,既简洁又符合Pythonic风格。咱们直接上代码,再慢慢拆解:
首先是你给出的示例列表:
# 设置函数的所有输入列表 t = [1, 3, 5, 8, 18, 34] d = ['07/13/2020 07:48 AM', '05/17/2020 01:34 AM', '06/13/2020 05:25 AM', '03/26/2020 09:46 PM', '05/10/2020 12:11 PM', '03/25/2020 03:36 AM'] n = [2, 4, 1, 3, 5, 1] tr= [156, 89, 743, 425, 987, 209] p = [45, 23, 88, 110, 150, 124]
然后是核心的检查逻辑:
# 把所有需要检查的列表打包成一个可迭代对象(元组比列表更适合这里) lists_to_check = (t, d, n, tr, p) # 用列表推导式生成长度检查结果,配合any()判断是否存在违规列表 if any([len(lst) > 5 for lst in lists_to_check]): raise ValueError("存在长度大于5的列表!")
代码说明:
- 打包列表:把所有要检查的列表放进一个元组
lists_to_check,这样就能统一遍历,避免重复写判断逻辑。 - 列表推导式的作用:
[len(lst) > 5 for lst in lists_to_check]会生成一个布尔值组成的列表,每个元素对应原列表的长度是否超过5。像你给出的示例,这个列表会是[True, True, True, True, True]。 - any()函数的妙用:
any()会检查布尔列表中是否存在至少一个True,如果有就触发if条件,抛出异常。如果所有列表长度都≤5,any()会返回False,程序就不会抛出异常。
小优化:用生成器表达式更高效
其实不需要生成完整的列表,把列表推导式换成生成器表达式能节省内存,而且any()会短路求值(遇到第一个True就停止遍历),性能更好:
if any(len(lst) > 5 for lst in lists_to_check): raise ValueError("存在长度大于5的列表!")
这样写出来的代码既简洁又高效,完全满足你的需求~
内容的提问来源于stack exchange,提问作者vasiop
相关产品推荐
相关产品推荐

