Python字符串操作程序 Python是一种流行的编程语言,提供了丰富的字符串操作功能。下面是一些Python程序示例,用于演示字符串操作的不同方法: 1. 长度计算: “`python string = “Hello, World!” length = len(string) print(“字符串长度为:”, length) “` 输出:字符串长度为: 13 2. 字符串连接: “`python string1 = “Hello” string2 = “World” result = string1 + “, ” + string2 + “!” print(“连接后的字符串为:”, result) “` 输出:连接后的字符串为: Hello, World! 3. 字符串分割: “`python string = “Hello, World!” result = string.split(“,”) print(“分割后的字符串为:”, result) “` 输出:分割后的字符串为: [‘Hello’, ‘ World!’] 4. 大小写转换: “`python string = “Hello, World!” result1 = string.upper() result2 = string.lower() print(“转换为大写后的字符串为:”, result1) print(“转换为小写后的字符串为:”, result2) “` 输出:转换为大写后的字符串为: HELLO, WORLD! 转换为小写后的字符串为: hello, world! 这些程序示例展示了Python中可用的一些常见字符串操作。要了解更多关于Python字符串操作的信息,请参阅Python官方文档。

在这个教程中,你将编写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字符串

语法[start: stop: step]返回字符串start到但不包括stop的切片,步长为step

  • 如果省略start,则切片从字符串的开头开始。
  • 如果不指定stop索引,则切片延伸到字符串的末尾。
  • 负值的step可以用于返回从字符串末尾开始的切片。

所以[::-1]返回字符串的逆序复制。

以下代码单元格包含了函数is_palindrome()的定义。

它以一个字符串作为参数,并根据它是否是回文返回TrueFalse

在这里,我们使用字符串切片来获取字符串的逆序复制。

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

你还可以在list comprehension中使用is_palindrome()函数,从一个更长的字符串列表中收集所有回文。

str_list = ["refer","blue","level","12321","dragon"]

palindromes = [string for string in str_list if is_palindrome(string)]
print(palindromes)
# 输出
['refer', 'level', '12321']

上面的代码的工作原理如下:

  • 遍历str_list,在每个字符串上调用is_palindrome()
  • 如果is_palindrome()返回True,则将该字符串添加到palindromes列表中。

如上面的输出所示,palindromesstr_list中所有回文字符串的列表。

检查两个Python字符串是否为变位词

在面试中,你可能会遇到另一个常见的问题,即检查一对字符串str1str2是否为变位词。

如果两个字符串中字符的数量完全相同,则称这两个字符串为变位词。这意味着你可以通过将另一个字符串中的字符进行排列重新排列来获得其中一个字符串。

变位词的例子包括state-taste,save-vase,elbow-below等。

如何使用Python中的Counter对象检查变位词

一种简单直观的方法是计算两个字符串中每个字符出现的次数。然后检查这些计数是否相等。

使用itertools模块中的Counter对象可以更轻松地完成这个任务。Counter对象返回一个Python字典:其中字符是,对应的计数是

考虑下面的字符串"save""vase"

str1 = "save"
str2 = "vase"

在这里,c1c2是包含字符串str1str2的字符计数的计数器对象。

from collections import Counter
c1 = Counter(str1)
c2 = Counter(str2)
print(c1)
print(c2)
c1 == c2

# 输出
Counter({'s': 1, 'a': 1, 'v': 1, 'e': 1})
Counter({'v': 1, 'a': 1, 's': 1, 'e': 1})
True

c1 == c2返回True,因为str1str2是变位词。

使用这个逻辑,现在我们可以定义一个带有两个参数word1word2的函数are_anagrams()。在函数体中,我们检查Counter(word1) == Counter(word2)

def are_anagrams(word1, word2):
  if Counter(word1) ==  Counter(word2):
    return True
  else:
    return False

▶️ 要验证,通过将str1str2作为参数调用are_anagrams()。由于str1str2是变位词(“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(),用于检查字符串是否为标题大小写。

.istitle()如果字符串的格式为标题大小写,则返回True,否则返回False

  • Python的字符串方法title()返回一个格式化为标题大小写的字符串的副本。

所以现在你可以使用这两个方法来解决这个问题。

定义一个接受name作为参数的函数check_titlecase()

  • 您可以在输入字符串上调用istitle()方法,以检查它是否以标题大小写格式。
  • 如果是True,您可以打印该字符串已经以标题大小写格式。
  • 否则,您可以调用title()方法并返回一个格式化为标题大小写的字符串副本。

以下代码单元格显示了check_titlecase()函数的定义。

def check_titlecase(name):
  if name.istitle():
    print(f"'{name}'已经以标题大小写格式化。")
  else:
    return name.title()

现在让我们调用带有参数的check_titlecase()方法。

check_titlecase("jane smith")

# 输出
Jane Smith

在上面的输出中,您可以看到字符串“Jane Smith”现在是以标题大小写格式。

▶️我们再举一个例子。

check_titlecase("agatha Christie")

# 输出
Agatha Christie

这次,让我们用一个标题大小写的字符串调用该函数。

将英文翻译成简体中文,保留,及HTML标签。

check_titlecase("Grace Hopper")

# 输出
'Grace Hopper' 已经是标题格式。

我们得到通知该字符串已经是标题格式,函数按预期运行。

结论 👩‍🏫

现在让我们总结一下我们讨论过的问题。

  • 要检查一个字符串是否是回文,检查该字符串和它的反转版本是否相等。你可以使用字符串切片或内置方法来反转字符串。
  • 要检查两个字符串是否是字母重排, 检查它们排序后的副本是否相等。要排序一个字符串,使用内置的 sorted() 函数。
  • 要验证一个名字是否是标题格式, 使用.istitle() 方法检查并使用.title() 方法获得一个标题格式的字符串副本。

希望您喜欢这篇关于Python字符串的教程。下一步,学习如何在Python中使用 list comprehensions in Python 或了解Python中的 not equal operator

祝您学习和编程愉快!🎉

类似文章