关于字符串操作的 Python 程序
已发表: 2022-04-26在本教程中,您将编写 Python 程序来解决有关字符串操作的常见问题。
您将学习如何检查 Python 字符串是否为回文、字谜以及标题大小写。
Python 字符串:快速回顾
在 Python 中,字符串是强大的内置数据类型。 它们可以存储一系列字符。
Python 字符串中的索引:与所有 Python 可迭代对象一样,字符串也是零索引的。 因此,长度为 N 的字符串的有效索引是 0、1、2 到 N – 1。

Python 还支持从字符串末尾访问元素的负索引。 所以 -1 是字符串中最后一个字符的索引,-2 是字符串中倒数第二个字符的索引,依此类推。
Python 字符串的不可变性:此外,Python 中的字符串是不可变的,因此您不能就地修改它们。 但是,您可以在它们上调用多个字符串方法并获取具有所需结果的字符串副本。
现在我们已经回顾了 Python 字符串的基础知识,让我们继续解决一些简单而有趣的问题。
开始吧。
检查 Python 字符串是否为回文
问题:给定一个 Python 字符串,检查它是否是回文。
如果是,则返回 True; 否则,返回 False。
所以我们的第一个问题是检查给定的字符串是否是回文。
回文是从左到右以及从右到左读取相同的字符串。 让我们列出几个例子:racecar、refer、level、madam、radar 等等。

以下是解决此问题的步骤:
- 如果需要,获取字符串的反向副本并将其存储在另一个变量中。
- 比较原始字符串和反转字符串的值。
- 如果它们相等,则字符串是回文。 所以返回True ,然后停止。
- 如果原始副本和反向副本不相等,则该字符串不是回文。 所以我们应该返回False 。
关键操作是获取字符串的反向副本。 在 Python 中,有几种不同的方法可以做到这一点。
但是,我们将介绍两种方法:
- 使用字符串切片
- 使用reversed()函数和join()方法
如何使用切片反转 Python 字符串
语法<any_str>[start: stop: step]
返回字符串<any_str>
从start
到但不包括stop
的切片,步长为step
。
- 如果省略
start
,则切片从字符串的开头开始。 - 如果您不指定
stop
索引,则切片将一直延伸到字符串的末尾。 -
step
的负值可用于返回从字符串末尾开始的切片。
所以<any_str>[::-1]
返回字符串的反向副本。
以下代码单元包含函数is_palindrome()
的定义。
它接受一个字符串作为参数,并根据它是否是回文返回True
或False
。
在这里,我们使用了字符串切片来获取字符串的反向副本。
def is_palindrome(this_str): rev_str = this_str[::-1] if (this_str == rev_str): return True else: return False
️ 现在我们已经定义了函数,我们可以继续使用任何有效的字符串作为参数进行调用。
is_palindrome("racecar") True
在上面的代码单元中, racecar
是一个回文。 所以函数is_palindrome()
按预期返回True
。
现在,尝试使用任何不是回文的字符串调用该函数,例如river
。
is_palindrome("river") False
如您所见,它返回False
,这是正确的。
如何使用 reversed() 和 join() 反转 Python 字符串
在 Python 中,您可以使用join()
方法和reversed()
函数来反转字符串。
-
reversed()
函数通过字符串中的字符返回一个反向迭代器。 - 然后可以使用
join()
方法以相反的顺序连接这些字符。
使用上述方法,您可以重写is_palindrome()
函数,如下面的代码单元格所示。
def is_palindrome(this_str): rev_str = ''.join(reversed(this_str)) if (this_str == rev_str): return True else: return False
您还可以在列表推导中使用is_palindrome()
函数从更长的字符串列表中收集所有回文。
str_list = ["refer","blue","level","12321","dragon"] palindromes = [string for string in str_list if is_palindrome(string)] print(palindromes) # Output ['refer', 'level', '12321']
以下是上述代码的工作原理:
- 遍历
str_list
,在每个字符串上调用is_palindrome()
。 - 如果
is_palindrome()
返回True
,则将该字符串添加到palindromes
列表中。
正如您在上面的输出中看到的, palindromes
是str_list
中所有回文字符串的列表。
检查两个 Python 字符串是否是 Anagrams
你在面试中可能遇到的另一个流行问题是检查一对字符串str1
和str2
是否是字谜。
如果两个字符串中的字符数完全相同,则称两个字符串为字谜。 这意味着您可以通过置换或重新排列另一个字符串中的字符来获取其中一个字符串。
字谜的示例包括 state-taste、save-vase、bow-below 等。

如何在 Python 中使用 Counter 对象检查字谜
一种简单直观的方法是计算两个字符串中每个字符的出现次数。 然后检查计数是否相等。
使用itertools
模块中的Counter
对象可以更轻松地完成此操作。 Counter 对象返回一个 Python 字典:字符作为键,相应的计数作为值。

考虑如下所示的字符串"save"
和"vase"
。
str1 = "save" str2 = "vase"
这里, c1
和c2
是计数器对象,分别包含字符串str1
和str2
的字符数。
from collections import Counter c1 = Counter(str1) c2 = Counter(str2) print(c1) print(c2) c1 == c2 # Output Counter({'s': 1, 'a': 1, 'v': 1, 'e': 1}) Counter({'v': 1, 'a': 1, 's': 1, 'e': 1}) True
c1 == c2
返回True
,因为str1
和str2
是字谜。
使用这个逻辑,我们现在可以继续使用两个参数word1
和word2
定义函数are_anagrams()
。 在函数体中,我们检查是否Counter(word1) == Counter(word2)
。
def are_anagrams(word1, word2): if Counter(word1) == Counter(word2): return True else: return False
️ 为了验证,调用are_anagrams()
并使用str1
, str2
作为参数。 由于str1
和str2
是字谜(“save”和“vase”),该函数返回True
,这是正确的。
are_anagrams(str1, str2) True
如何使用已排序的字符串副本检查字谜
还有另一种方法可以做到这一点。
如果两个字符串是字谜,那么它们的排序副本是相等的。
所以我们可以重写函数are_anagrams()
来检查str1
的排序版本是否与str2
的排序副本相同。 如果它们相等,那么这两个字符串是字谜; 否则,他们不是。
使用上述方法检查排序副本的相等性,我们可以重写函数are_anagrams()
如下。
def are_anagrams(word1, word2): if sorted(word1) == sorted(word2): return True else: return False
现在让我们进行一些函数调用。
- 字符串“elbow”和“below”是字谜,函数
are_anagrams()
返回True
。 - 并且“state”和“tasted”不是字谜,函数返回
False
。
are_anagrams("below","elbow") True are_anagrams("state","tasted") False
检查 Python 字符串是否在标题大小写中
这是本教程的最后一个问题。
问题:给定一个字符串:一个人的名字——有名字和姓氏。
您必须检查名字和姓氏的第一个字母是否大写。
这种将每个单词的首字母大写的大小写称为标题大小写。
所以你必须检查名字是否在标题中:
1. 如果是,则输出格式为标题大小写的消息。
2. 否则,返回以标题大小写格式格式化的字符串的副本

- Python 有一个内置的字符串方法
istitle()
,它检查字符串是否在标题大小写中。
<str>.istitle()
如果字符串<str>
在标题大小写中被格式化,则返回True
,否则返回False
。
- Python 的字符串方法
title()
返回以标题格式格式化的字符串的副本。
所以现在你可以使用这两种方法来解决问题。
定义一个接受name
作为参数的函数check_titlecase()
。
- 您可以在输入字符串上调用
istitle()
方法来检查它是否以标题大小写格式设置。 - 如果
True
,您可以打印该字符串已经是标题大小写。 - 否则,您可以调用
title()
方法并在标题大小写中返回字符串的副本。
以下代码单元显示了check_titlecase()
函数的定义。
def check_titlecase(name): if name.istitle(): print(f"'{name}' is already formatted in title case.") else: return name.title()
现在让我们使用参数调用check_titlecase()
方法。
check_titlecase("jane smith") # Output Jane Smith
在上面的输出中,您可以看到字符串“Jane Smith”现在位于标题大小写中。
️让我们再举一个例子。
check_titlecase("agatha Christie") # Output Agatha Christie
这一次,让我们使用标题大小写的字符串调用该函数。
check_titlecase("Grace Hopper") # Output 'Grace Hopper' is already formatted in title case.
我们收到通知,该字符串已按标题大小写格式化,并且该函数按预期工作。
结论
现在让我们总结一下到目前为止我们讨论过的问题。
- 要检查字符串是否为回文,请检查字符串及其反转版本是否相等。 您可以使用字符串切片或内置方法来反转字符串。
- 要检查两个字符串是否是字谜,请检查它们的排序副本是否相等。 要对字符串进行排序,请使用内置的sorted()函数。
- 要验证名称是否为标题大小写,请使用.istitle()方法进行检查,并使用.title()方法获取字符串的标题大小写副本。
我希望你喜欢这个 Python 字符串教程。 下一步,学习如何在 Python 中使用列表推导或了解 Python 中的不等于运算符。
快乐的学习和编码!