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 常为 True;s3 由运行期拼接得到时,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() 后再比 |