Skip to content

Python 字符串比较

字符串比较常用 ==!= 判断内容是否相同;用 <><=>=字典序(逐字符按 Unicode 码位)比较。这与 比较运算符 一致;更多字符串 API 见 字符串函数

==!=(按内容)

python
a = input("请输入第一个字符串:")
b = input("请输入第二个字符串:")

if a == b:
    print("两个字符串相同。")
else:
    print("两个字符串不同。")

示例交互:

text
请输入第一个字符串:AA
请输入第二个字符串:AA
两个字符串相同。
python
a = input("请输入第一个字符串:")
b = input("请输入第二个字符串:")

if a != b:
    print("两个字符串不相等。")
else:
    print("两个字符串相同。")
text
请输入第一个字符串:ab
请输入第二个字符串:ba
两个字符串不相等。

与顺序无关:是否「同一批字符」(字谜式)

若只关心字符多重集合是否相同(忽略排列),可先对字符序列排序再比:

python
s1 = input("请输入第一个字符串:")
s2 = input("请输入第二个字符串:")

if sorted(s1) == sorted(s2):
    print("排序后相同(字符及次数一致,仅顺序可能不同)。")
else:
    print("排序后也不同。")

示例:"abc""cba" 会得到相同排序结果。

注意:空格、标点也参与比较;"listen""silent" 是典型的相等排序,而 "hello""world" 则不等。

sorted内置函数,不是 str 的方法。

is:是否为同一对象(勿与 == 混淆)

is 判断两个引用是否指向同一对象,不是比较字符串内容

python
s1 = "DEED"
s2 = "DEED"
s3 = "".join(["D", "E", "E", "D"])

print(s1 is s2)
print("s1 is s3 =", s1 is s3)

CPython 中,短字符串可能被驻留s1 is s2 常为 Trues3 由运行期拼接得到时,s1 is s3 多为 False,但 s1 == s3 仍为 True

判断两个字符串文字是否相同,应优先用 ==

字典序:<><=>=

python
word = "Engineering"

print(word < "Engineering")
print(word > "Engineering")
print(word <= "Engineering")
print(word >= "Engineering")

输出:

text
False
False
True
True

规则:从左到右逐字符比较码位;若一方是另一方前缀,则较短者更小(例如 "ab" < "abc")。

不区分大小写怎么办?

不能直接用 == 时,可先统一大小写再比,例如:

python
a.lower() == b.lower()
# 或更强调 Unicode 等价时考虑 casefold()
a.casefold() == b.casefold()

详见 str.lower / str.casefold 官方说明。

小结

需求做法
内容是否相同== / !=
是否同一对象is(少用做字符串相等判断)
字典序<><=>=
忽略排列、只比字符组成sorted(s1) == sorted(s2)
忽略大小写lower() / casefold() 后再比

参考