【问题标题】:How to check whether string a is a substring of but not equal to string b?如何判断字符串a是否为字符串b的子串但不等于字符串b?
【发布时间】:2022-11-27 16:40:20
【问题描述】:

我知道,如果我们想知道字符串 a 是否包含在 b 中,我们可以使用:

a in b

当a等于b时,上面的表达式仍然返回True。我想要一个在a == b 时返回False 并在ab 的子字符串时返回True 的表达式。所以我使用了以下表达式:

a in b and a != b

我只是想知道 Python 中是否有更简单的表达式以相同的方式工作?

【问题讨论】:

  • 这非常简单明了。
  • 如果a不在b的开头,你可以试试b.find(a) > 0。如果 a 可能在 b 的开头,那么它不起作用:)

标签: python


【解决方案1】:

不确定在 Python 中直接字符串比较的效率如何,但假设它们是打开的)这应该是相当有效的并且仍然可读:

len(a) < len(b) and a in b

喜欢其他答案它也是 O(n),但长度操作应该是 O(1)。它也应该更适合边缘情况(例如 a 大于 b)

【讨论】:

    【解决方案2】:

    这将是一个简短的答案,但事实就是如此。你有什么就够了。

    虽然可能还有其他选择,但您的方法比其他任何方法都容易理解、简单且可读性更强(当然,这对每个人和每个人来说都是主观的)。海事组织Python 中以相同方式工作的更简单的表达式不存在。这只是我个人对这个问题的看法。通常鼓励我关注KISS

    KISS 原则指出,大多数系统在保持不变的情况下工作得最好 简单而不是复杂;因此简单应该是 应避免设计中的关键目标和不必要的复杂性。

    例如,另一个答案与明确的 and 没有任何不同,当与 in== 一起使用时,链接可能会造成混淆,因为很多人会把它看作 (a1 in b) != a1,至少乍一看是这样.

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-08-26
      • 2015-08-29
      • 2016-10-08
      • 2014-03-23
      • 1970-01-01
      • 1970-01-01
      • 2011-02-27
      相关资源
      最近更新 更多