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

Posted

技术标签:

【中文标题】如果字符串不在一个或多个列表中,则引发错误【英文标题】:Raising error if string not in one or more lists 【发布时间】:2016-05-16 17:56:30 【问题描述】:

如果列表列表的一个或多个列表中没有出现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 的解决方案。

【问题讨论】:

请输入示例? 您多久进行一次查找? 【参考方案1】:

使用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))

生成器为每个单独的测试生成TrueFalseall() 检查它们是否都为真。由于我们使用的是生成器,因此评估是惰性的,即它会在找到第一个 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))

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

【讨论】:

就个人而言,我发现您的第一个解决方案比第二个解决方案更具可读性。不管怎样,答案都很好! @MichaelGruenstaeudl 让我重新表述为“但您可能会发现......更具可读性,但这取决于个人喜好”;-)【参考方案2】:

您可以通过以下方式保持惰性评估并增强易读性:

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

【讨论】:

以上是关于如果字符串不在一个或多个列表中,则引发错误的主要内容,如果未能解决你的问题,请参考以下文章

Python 在列表理解中引发错误(或更好的选择)

FIND_IN_SET

问题 >> 如果字符串包含两个或多个字符,则打印“True”或“False”

Excel导入数据到Sql server 中出错:“文本被截断,或者一个或多个字符在目标代码页中没有匹配项”

redis的数据类型List,其原生命令和php操作Redis List函数介绍

我正在尝试检查电子邮件是不是已存在于数据库中或不在数据库中,但我的代码会引发错误