如果一个列表的列表中没有出现目标字符串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))
当然,有比上面指定的解决方案更具Python风格的解决方案。
如果一个列表的列表中没有出现目标字符串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))
使用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))
但是我不确定这是否真的会提高可读性。
NameError: name 'target_string' is not defined
- abolfazl taghribi你可以通过以下方式保持惰性求值并提高可读性:
for lst in lst_of_lsts :
if target_string not in lst :
raise ValueError('At least one list does not contain "%s"' % (target_string))