HOWTO · Python

如何在 Python 中使用 if 语句比较字符串

了解如何在 Python 中使用 if 条件比较字符串内容、检查子字符串或允许的输入,并按需忽略大小写。

本页内容

在 Python 中,使用 if 和 == 比较字符串内容,用 in 检查子字符串是否出现或输入是否属于允许的选项;如果比较时要忽略字母大小写,可以先调用 lower() 等方法。应根据任务选择条件:字符串比较默认区分大小写,而 is 检查的是对象身份,不是文本是否相等。

字符串基本比较

如果两个字符串应包含相同文本,使用 ==;如果它们应当不同,使用 !=。比较两侧的变量都必须在条件执行前定义。更多比较说明请参阅如何在 Python 中比较字符串。

下面的示例检查姓名是否匹配:

name = "Alice"
if name == "Alice":
    print("Hello, Alice!")
else:
    print("You're not Alice.")

Python 区分大小写,因此 "Alice" == "alice" 的结果为假。如果任务关注的是字符串长度而不是内容,也可以用 len() 比较长度:

word1 = "Python"
word2 = "Programming"
if len(word1) < len(word2):
    print(f"{word1} is shorter than {word2}")
else:
    print(f"{word1} is not shorter than {word2}")

运算符 <、>、<= 和 >= 按 Unicode 码点的字典序比较字符串;它们不判断词义,也不保证符合所有语言的字母顺序。面向用户的排序应使用适当的区域设置排序方法。

使用 in 关键字检查字符串

对于字符串,in 用于检查左侧文本是否作为子字符串出现在右侧字符串中。该检查区分大小写,也不要求匹配内容恰好是一个独立单词:

sentence = "Python is awesome"
if "awesome" in sentence:
    print("The sentence contains 'awesome'")

如果要检查输入是否与多个允许的字符串之一完全匹配,可以使用集合。下面先将用户的回答转换为小写,再检查它是否属于允许选项:

user_input = "y"
if user_input.lower() in ["y", "yes", "yeah"]:
    print("User agreed")
else:
    print("User did not agree")

有关子字符串检查及相关写法,请参阅如何检查 Python 字符串是否包含另一个字符串。要查找重复出现的位置,请参阅查找字符串中某个字符的所有出现位置。

忽略大小写比较字符串

如果比较时需要忽略大小写,应对两侧的字符串进行规范化。简单匹配常用 lower();casefold() 则适用于对 Unicode 文本进行更彻底的无大小写匹配。规范化会改变比较方式,因此只有任务确实要求忽略大小写时才使用。

user_input = "YES"
if user_input.lower() == "yes":
    print("Affirmative response received")

同样的方法也适用于成员检查:

color = "RED"
if color.lower() in ["red", "blue", "green"]:
    print("Color accepted")
else:
    print("Color not accepted")

简单转换大小写时可以使用 lower() 或 upper()。更多示例请参阅如何在 Python 中将字符串转换为小写或大写。

进阶字符串比较

检查字母异位词

对字符排序,可以简单判断两个字符串是否包含数量相同的字符:

word1 = "listen"
word2 = "silent"
if sorted(word1) == sorted(word2):
    print("The words are anagrams")

这种比较会把大写和小写字母视为不同字符,也会计算空格和标点符号。如果这些字符不应参与判断,请先规范化或过滤字符串。

使用字符串方法

startswith() 和 endswith() 等方法可以直接检查字符串的前缀和后缀:

filename = "document.txt"
if filename.endswith(".txt"):
    print("Text file detected")

组合多个条件

可以用 and、or 和 not 组合检查。使用 and 时,左右两侧都必须为真,整个条件才成立:

name = "John Doe"
if name.startswith("John") and " " in name:
    print("Name matches the expected format")

这只是简单的文本检查,并不能验证所有可能的姓名格式。

比较对象身份

is 用于判断两个名称是否指向同一个对象。比较字符串内容时应使用 ==;对象身份不能可靠地用于判断文本是否相等。

first = "Python"
second = "Python"
if first == second:
    print("The strings have equal contents")

总结

比较字符串内容时使用 == 或 !=;检查子字符串或集合成员时使用 in;只有在不应考虑字母大小写时才进行大小写规范化。检查前缀和后缀可以使用相应的字符串方法。比较文本是否相等应使用 ==;is 判断的是另一个问题,即对象身份。

常见问题

Python 中的字符串比较区分大小写吗?

区分。默认情况下,"Python" 和 "python" 是不同的字符串。如果比较时要忽略大小写,请先规范化两个值。

if 语句可以检查多个字符串条件吗?

可以。用 and 或 or 连接条件;如果括号能让分组意图更清楚,也可以加上括号。

== 和 is 有什么区别?

== 比较值;is 检查两个引用是否指向同一个对象。比较字符串内容时使用 ==。

如何检查字符串是否以特定文本开头或结尾?

调用 startswith() 或 endswith(),例如 filename.endswith(".txt")。

可以在 if 条件中使用正则表达式吗?

可以。在条件中调用 Python re 模块的函数,例如 re.search(pattern, text),以匹配指定模式。简单的子字符串检查通常直接使用 in 更清楚。