如果字符串不在一个或多个列表中,则引发错误

时间:2016-02-06 21:07:03

标签: python list boolean

如果在列表列表的一个或多个列表中没有出现 target_string ,我希望手动引发错误。

if False in [False for lst in lst_of_lsts if target_string not in lst]:
    raise ValueError('One or more lists does not contain "%s"' % (target_string))

肯定有比上面指定的更多的Pythonic解决方案。

2 个答案:

答案 0 :(得分:9)

使用all()

if not all(target_string in lst for lst in lst_of_lsts):
    raise ValueError('One or more lists does not contain "%s"' % (target_string))

生成器为每个单独的测试生成TrueFalse,并all()检查是否所有测试都为真。由于我们使用的是生成器,因此评估是惰性的,即在没有评估完整列表的情况下找到第一个False时它会停止。

或者,如果同一标签上的双in看起来令人困惑,可能会

if not all((target_string in lst) for lst in lst_of_lsts):
    raise ValueError('One or more lists does not contain "%s"' % (target_string))

但我不太确定实际上会增加可读性。

答案 1 :(得分:0)

您可以通过以下方式保持懒惰评估并增强隐身性:

for lst in lst_of_lsts :
   if target_string not in lst : 
      raise ValueError('At least one  list does not contain "%s"' % (target_string))