【问题标题】:Python ShortHand for OR statement [closed]OR语句的Python速记[关闭]
【发布时间】:2020-07-27 20:38:02
【问题描述】:

我正在尝试检查是否在查询中找到了列表中的任何一个元素。

但代码不起作用

if ['time' or 'Time'] in query:
sayTime()

【问题讨论】:

  • 尝试打印['time' or 'Time'] 的值。 if any(elem in query for elem in word_list): 应该可以解决问题。顺便说一句,变量和函数名称通常应遵循 lower_case_with_underscores 样式。
  • 简单的方法,在这两种情况下都使用in 运算符,即检查大小写单词,而不需要在列表中包含字符串。或者您可以单独检查,然后继续。

标签: python list syntax


【解决方案1】:

如果目标是验证变量 query 包含字符串 time 不敏感:

query = 'the Time is up'
if 'time' in query.lower():
    sayTime()

如果我们正在寻找非常具体的变化,我们可以通过一系列可接受的匹配进行测试:

query = 'the Time is up'
if any([x in query for x in ['time', 'Time']]):
    sayTime()

但请注意,in 可能会在意图完全匹配时出现误报,例如 'time' in 'time to die' 为 True。

因此,如果我们想要进行字符串比较,我们可以按照之前的建议进行小写并进行直接比较。

if 'time' == query.lower():
    sayTime()

或检查查询是否存在in可接受值的列表:

if query in ['time', 'Time']:
    sayTime()

在第二个示例中,query = 'TIME' 不会满足 if 条件,而在第一个示例中会。

【讨论】:

  • 为什么是误报?带字符串的in 的目的是查找子字符串。如果他想要完全匹配,他会使用==
  • 问题说是在inside查询中找到的。
  • 你是绝对正确的......我不知何故错过了这一点,有趣地解决了他的问题,所以我想我是按预期而不是按书面阅读。为此,有一个很好的查询值示例肯定会有所帮助...我将修改此答案以更好地处理 in 示例。
【解决方案2】:
if any(x in query for x in ('time', 'Time')):

但如果您只想不区分大小写地进行检查,您可以这样做:

if 'time' in query.lower():

我假设 query 是一个字符串,而不是一个列表。

【讨论】:

  • 你的第一个建议假设query 是一个容器,而第二个假设query 是一个字符串
  • 虽然在这个具体的例子中应该没什么区别,但是最好用str.casefold(),不是吗?
  • 谢谢,这对我来说是新的。我在其他问题中看到的所有示例都使用lower()
  • @DeepSpace 我认为我的第一个应该适用于任何一种情况。
  • 使用 in 进行字符串评估的问题是它在匹配时误报: >>> 'foo' in 'FOOBAR'.lower() True where as when评估针对列表或元组: >>> 'foo' in ['foobar'] False 所以虽然 in 适用于列表和字符串,但两者之间的行为非常不同。
猜你喜欢
  • 1970-01-01
  • 2014-02-17
  • 1970-01-01
  • 1970-01-01
  • 2017-03-07
  • 2021-10-09
  • 1970-01-01
  • 2011-08-06
  • 1970-01-01
相关资源
最近更新 更多