Python 如何检查字符串a是否是字符串b的子字符串,但不等于字符串b?

Python 如何检查字符串a是否是字符串b的子字符串,但不等于字符串b?,python,Python,我知道,如果我们想知道字符串a是否包含在b中,我们可以使用: a in b 当a等于b时,上述表达式仍然返回True。我想要一个表达式,当a==b时返回False,当a是b的子字符串时返回True。因此,我使用了以下表达式: a in b and a != b 我只是想知道Python中是否有一个更简单的表达式以同样的方式工作?这将是一个简短的答案,但事实就是如此。你所拥有的已经足够了 虽然可能还有其他选择,但您的方式很容易理解,比任何其他方式都简单易懂(当然,这对每个人来说都是主观的)。在

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

a in b
当a等于b时,上述表达式仍然返回
True
。我想要一个表达式,当
a==b
时返回
False
,当
a
b
的子字符串时返回
True
。因此,我使用了以下表达式:

a in b and a != b

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

这将是一个简短的答案,但事实就是如此。你所拥有的已经足够了

虽然可能还有其他选择,但您的方式很容易理解,比任何其他方式都简单易懂(当然,这对每个人来说都是主观的)。在我看来,Python中不存在以相同方式工作的更简单表达式。这只是我个人对这个问题的看法。我通常被鼓励遵循:

KISS原则指出,大多数系统如果保持不变,工作效果最好 简单而不是复杂;因此,简单性应该是一个重要因素 应避免设计中的关键目标和不必要的复杂性


例如,另一个答案与显式的
没有任何区别,当与
中的
=
一起使用时,链接可能会混淆,因为许多人会将其视为
(b中的a1)!=a1
,至少乍一看是这样。

不确定Python中的直接字符串比较有多有效,但假设它们是O(n),这应该是相当有效的,并且仍然可读:

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

和其他答案一样,它也是O(n),但长度运算应该是O(1)。它还应该更适合边缘情况(例如,a大于b)

这非常简单和清晰。如果a不在b的开头,您可以尝试
b.find(a)>0
。如果a可能位于b的开头,则它不起作用:)