程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式師世界 >> 編程語言 >  >> 更多編程語言 >> Python

【Python】高級變量通關教程下篇(字符串與切片專題詳解)

編輯:Python

個人主頁:黃小黃的博客主頁
支持我: 點贊 收藏 關注
格言:一步一個腳印才能承接所謂的幸運

本文來自專欄:Python基礎教程
歡迎點擊支持訂閱專欄 ️

文章目錄

  • 前言
  • 1 字符串說明
  • 2 字符串的常見操作
    • 2.1 字符串中的常見方法總覽
    • 2.2 字符串的長度、次數與位置統計
    • 2.3 判斷字符串
    • 2.4 字符串的查找和替換
    • 2.5 去除字符串中的空白字符
    • 2.6 字符串的拆分和拼接
  • 3 切片
    • 3.1 切片的概念與說明
    • 3.2 切片的使用——以字符串為例
  • 4 本文配套練習題*
    • 4.1 練習一
    • 4.2 練習二
  • 寫在最後


前言

本文講述了高級變量——字符串的相關知識,並對字符串的常見操作進行了歸納總結:對空白字符的處理,字符串查找,字符串逆序,字符串判斷,大小寫問題等。 另外,也對 Python 中的 切片方法進行了總結。
如果想了解 列表、元組、字典的相關知識,請查閱博主的上篇文章,超鏈接附上,點擊即可到達:【Python】高級變量通關教程上篇(列表、元組、字典)


1 字符串說明

簡介:

  • 字符串就是一串字符;
  • Python中使用 一對雙引號、一對單引號 定義一個字符串;
  • 可以使用 索引 獲取字符串中 指定位置的字符,與列表、元組類似,字符串中的索引同樣是 從0開始
  • 在上篇中,我們提到,字符串同樣可以通過 for 循環遍歷。

關於引號的幾點說明:
學習過其他編程語言的小伙伴想必都知道,我們可以使用轉義字符,比如:\'' 或者 \',但是在 Python 實際使用中,建議:

  1. 對於字符串內部有 " ,可以使用 ' 來定義字符串;
  2. 對於字符串內部有 ,可以使用 "來定義字符串;

下面的代碼定義了一個字符串:我是’黃小黃’同學

str = "我是'黃小黃'同學"

str 字符串存儲結構圖如下:

嘗試使用 for 逐個字符遍歷並打印

str = "我是'黃小黃'同學"
for char in str:
print(char)


2 字符串的常見操作

2.1 字符串中的常見方法總覽

這裡僅粗略展示 python 中的字符串可以使用的方法,大家只需要熟悉有個大概的認識即可,後面會對具體的方法作詳細解釋。

1️⃣ 判斷字符串(返回值為布爾型):

方法名說明str.isspace()如果 str 只包含空格,則返回 Truestr.isalnum()如果 str 所有字符都為字母或者數字,則返回 Truestr.isalpha()如果 str 所有字符都為字母,則返回 Truestr.isdecimal()如果 str 只包含數字則返回 True,全角數字str.isdigit()如果 str 只包含數字則返回 True,全角數字、(1)、\u00b2str.isnumeric()如果 str 只包含數字則返回 True,全角數字、漢字數字str.istitle()如果 str 是標題化的,即每個單詞都是首字母大寫,則返回 Truestr.islower()如果 str 中包含至少一個區分大小寫的字符,且都是小寫,則返回 Truestr.isupper()如果 str 中包含至少一個區分大小寫的字符,且都是大寫,則返回 Truestr.startswith(s)如果字符串 str 是以 s 開頭,則返回 Truestr.endswith(s)如果字符串 str 是以 s 結尾,則返回 True

2️⃣ 查找與替換字符串:

方法名說明str.find(s,start,end)檢查 s 是否包含在 str 中,如果指定了 start 和 end 則在指定范圍查找(左閉右開),如果包含則返回開始索引,否則返回 -1。與其他查找方法類似,若查找的字符出現多次,則返回第一次出現的索引!str.rfind(s,start,end)與 find() 的區別是從右側開始尋找str.index(s,start,end)與 find() 方法類似,但是不存在則會報錯str.rindex(s,start,end)與 index() 方法類似,但是是從右側開始查找str.replace(old_str,new_str,num)將 str 中的 old_str 替換成 new_str,如果指定了 num,則替換不超過 num 次

3️⃣ 大小寫轉換:

方法名說明str.capitalize()將 str 的第一個字符大寫str.title()將字符串的每個單詞首字母大寫str.lower()轉換 str 中的所有大寫字母為小寫str.upper()轉換 str 中的所有小寫字母為大寫str.swapcase()翻轉 str 的大小寫

4️⃣ 對字符串的空白字符進行處理:

方法名說明str.lstrip()去除 str 的開始空白字符str.rstrip()去除 str 的結束空白字符str.strip()去除 str 開始和結束的空白字符

5️⃣ 對字符串進行拆分和連接:

方法名說明string.split(str,num)以 str 為分隔符切片 string,如果有指定 num,則僅分隔 num + 1個子字符串string.join(seq)以 string 為分隔符,將 seq 中所有的元素(的字符串表示)合並成一個新的字符串

看到這兒,想必大家也覺得好多啊!這裡博主只是列舉了我們常用的一些方法,還有例如字符串對齊等的方法沒有給出,其實,這些不用特意去記憶,使用多了自然就記住了,當忘記的時候,記得多動手,去查閱相關的方法說明~~~

2.2 字符串的長度、次數與位置統計

相關方法一覽表:

方法名說明len(str)返回 str 字符串的長度s.count(str)返回 str 字符串在 s 字符串出現的次數s.index(str)返回 str 字符串在 s 字符串第一次出現的索引,如果 s 字符串中不包含 str 字符串,則程序會報錯

示例代碼:

str = "我是'黃小黃'同學"
# 統計字符串長度
str_len = len(str)
print("字符串的長度為: %d" % str_len)
# 統計子串出現的次數
son_str_count = str.count("黃小黃")
print('子字符串"黃小黃"出現的次數: %d' % son_str_count)
# 統計子串出現的位置
son_str_index = str.index("黃小黃")
print('"黃小黃"出現的索引位於原字符串: %d' % son_str_index)

結果:

2.3 判斷字符串

在概述裡,我們學習了許多判斷字符串的方法,其中我們介紹到 isspace() 方法用於判斷字符串是否全部為空格,實際上,\t\n\r 也可以,相關方法的例子放在下面的代碼裡,答案還是老樣子,放在注釋中。

代碼示例:

# 1.判斷空白字符
str1 = ' \t \r \n'
print(str1.isspace()) # True
# 2.判斷字符串是否為數字
str2 = '123456五'
print(str2.isdecimal()) # False
print(str2.isdigit()) # False
print(str2.isnumeric()) # True
str3 = '1.444'
print(str3.isdecimal()) # False
print(str3.isdigit()) # False
print(str3.isnumeric()) # False

從例子中我們還可以看出:三種判斷數字的方法均沒辦法判斷小數,另外,isnumeric() 方法還可以判斷出中文數字,三種判斷數字的方法范圍依次增加,實際開發中,我們一般使用的是 isdecimal() 方法

2.4 字符串的查找和替換

代碼示例:

# 1.查找指定字符串
str1 = '你好,我是黃小黃同學!'
print(str1.find('黃小黃')) # 5
print(str1.find('黃')) # 5
print(str1.find('黃', 0, 5)) # -1
# 2.替換字符串
str2 = '我的博客名:Nezuko627'
str3 = str2.replace('Nezuko627', '小黃小黃不再迷茫')
print(str3) # 我的博客名:小黃小黃不再迷茫
str4 = 'dog dog dog'
print(str4.replace('dog', 'cat')) # cat cat cat
print(str4.replace('dog', 'cat', 2)) # cat cat dog

從上述代碼示例我們可以總結出:

  1. 查找字符串,比如 find 方法,返回的是查找字符串出現第一次的索引;
  2. 如果指定查找的范圍,示例中為索引 05,實際上應該解釋成[0,5),即左閉右開區間
  3. 字符串替換方法,replace 默認替換字符串的所有 old_str,當指定 num 時,則最多替換 num 次,示例中給的是 2

2.5 去除字符串中的空白字符

該部分內容比較簡單,不作解釋,具體看代碼及運行結果即可。
代碼示例:

# 1.查找指定字符串
str1 = '你好,我是黃小黃同學!'
print(str1.find('黃小黃')) # 5
print(str1.find('黃')) # 5
print(str1.find('黃', 0, 5)) # -1
# 2.替換字符串
str2 = '我的博客名:Nezuko627'
str3 = str2.replace('Nezuko627', '小黃小黃不再迷茫')
print(str3) # 我的博客名:小黃小黃不再迷茫
str4 = 'dog dog dog'
print(str4.replace('dog', 'cat')) # cat cat cat
print(str4.replace('dog', 'cat', 2)) # cat cat dog

運行結果:

我是黃小黃同學
我是黃小黃同學
我是黃小黃同學

2.6 字符串的拆分和拼接

前面我們已經介紹過,通過 split 方法可以把一個字符串拆分成一個列表,而通過 join 方法,可以把一個列表拼接成一個字符串。
代碼示例:

mystr = '哈 利 波 特 的 魔 法 世 界'
mylist = mystr.split(' ')
print(mylist)
mystr_temp = ' '.join(mylist)
print(mystr_temp)

實現結果:

['哈', '利', '波', '特', '的', '魔', '法', '世', '界']
哈 利 波 特 的 魔 法 世 界

在示例中,將 mystr 字符串按照空格進行了切分,返回的列表使用了 mylist 接收。 而後,使用空格作為分隔符將 mylist 列表中的元素以字符串表示的形式拼接成了個字符串 mystr_temp。

需要注意的是,如果不指定 split 的參數,其默認以空白字符分隔,比如空格、\t等,示例如下代碼:

mystr = '哈 利 波 特 的 魔 法\n世\t界'
mylist = mystr.split()
print(mylist) # ['哈', '利', '波', '特', '的', '魔', '法', '世', '界']

3 切片

3.1 切片的概念與說明

簡介:

  • 切片 方法適用於 字符串、列表、元組
  • 切片 使用 索引值 來限定范圍;
  • 列表元組 都是 有序 的集合,都能通過 索引值 獲取對應的數據,因此可以使用切片;
  • 為了方便使用,Python 提供了倒序索引,具體見下圖:

語法如下:

字符串名/列表名/元組名[開始索引:結束索引:步長]

注意點:

  1. 指定的區間屬於左閉右開型;
  2. 如果是從頭開始,則開始索引可以省略冒號不能省略
  3. 如果是到末尾結束,則結束索引可以省略冒號不能省略
  4. 步長可以省略,默認為1。

需要特別注意的是,如果倒序遍歷,記得修改步長為負數

3.2 切片的使用——以字符串為例

str = '我是黃小黃同學'

1.截取從 2 ~ 5 位置的字符串,截取 2 ~ 末尾的字符串:

str = '我是黃小黃同學'
print(str[2:6]) # 黃小黃同
print(str[2:]) # 黃小黃同學

2.截取完整的字符串

str = '我是黃小黃同學'
print(str[:]) # 我是黃小黃同學

3.截取完整的字符串,每兩個取一個(隔一個取一個)

str = '我是黃小黃同學'
print(str[::2]) # 我黃黃學

4.截取字符串,不包含最後一個元素

str = '我是黃小黃同學'
print(str[:-1]) # 我是黃小黃同

5.截取末尾兩個字符

str = '我是黃小黃同學'
print(str[-2:]) # 同學

6.利用切片求字符串的逆序
將步長設置為-1即可,列舉兩種方式

str = '我是黃小黃同學'
print(str[::-1]) # 學同黃小黃是我
print(str[-1::-1]) # 學同黃小黃是我

以下為錯誤示范

str = '我是黃小黃同學'
print(str[0::-1]) # 我

4 本文配套練習題*

4.1 練習一

假設有一段英文,其中有單詞中間的字母i被誤寫為I,請編寫程序進行糾正

代碼示例:

思路見注釋!!!

# 先接收一段英文
message = input("Please enter: ")
# 先將接收的字符串進行判斷,所有的 I 改成 i
message = message.replace('I', 'i')
# 對英文句子的首字母大寫
message = message.capitalize()
# 輸出修改後的結果
print(message)

結果:

4.2 練習二

有一段英文文本,其中有單詞連續重復了兩次,編寫程序檢查重復單詞並只保留一個。例如,文本內容為“This is is a dask.”,程序輸出為“This is a desk.”。

代碼示例:

思路見注釋!!!

# 先接收一個句子,以空格為分隔符轉成列表接收
message = input('Please enter a sentence: ').split(' ')
result = '' # 接收結果
# 先加入第一個單詞
result += message[0]
# 逐個判斷單詞是否重復,重復則不添加到結果result
for item in range(1, len(message)):
if message[item] == message[item-1]:
continue
else:
result += ' ' + message[item]
# 輸出結果
print(result)

結果:


寫在最後

以上便是本文的全部內容啦,後續內容將會持續免費更新,如果文章對你有所幫助,麻煩動動小手點個贊 + 關注,非常感謝 ️ ️ ️ !
如果有問題,歡迎私信或者評論區!

共勉:“你間歇性的努力和蒙混過日子,都是對之前努力的清零。”


  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式師世界 All Rights Reserved