關於字符串操作的 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 中的不等於運算符。
快樂的學習和編碼!