如果在列表列表的一个或多个列表中没有出现 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解决方案。
答案 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))
生成器为每个单独的测试生成True
或False
,并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))