1. 程式人生 > >Python基礎進階之路(五)之字串

Python基礎進階之路(五)之字串

字串

字串的定義

字串 就是 一串字元,是程式語言中表示文字的資料型別

在 Python 中可以使用 一對雙引號 " 或者 一對單引號 ' 定義一個字串

雖然可以使用 \" 或者 \' 做字串的轉義,但是在實際開發中:

  • 如果字串內部需要使用 ",可以使用 ' 定義字串
  • 如果字串內部需要使用 ',可以使用 " 定義字串

可以使用 索引 獲取一個字串中 指定位置的字元,索引計數從 0 開始

也可以使用 for 迴圈遍歷 字串中每一個字元

大多數程式語言都是用 " 來定義字串

string = "Hello Python"for c in string:
    
print(c)

 

字串的常用操作

定義一個 字串,例如:hello_str = ""

字串 能夠使用的 方法 如下:

hello_str.capitalize    hello_str.isidentifier  hello_str.rindex
hello_str.casefold      hello_str.islower       hello_str.rjust
hello_str.center        hello_str.isnumeric     hello_str.rpartition
hello_str.count         hello_str.isprintable   hello_str.rsplit
hello_str.encode        hello_str.isspace       hello_str.rstrip
hello_str.endswith      hello_str.istitle       hello_str.split
hello_str.expandtabs    hello_str.isupper       hello_str.splitlines
hello_str.find          hello_str.join          hello_str.startswith
hello_str.format        hello_str.ljust         hello_str.strip
hello_str.format_map    hello_str.lower         hello_str.swapcase
hello_str.index         hello_str.lstrip        hello_str.title
hello_str.isalnum       hello_str.maketrans     hello_str.translate
hello_str.isalpha       hello_str.partition     hello_str.upper
hello_str.isdecimal     hello_str.replace       hello_str.zfill
hello_str.isdigit       hello_str.rfind

 

提示:正是因為 python 內建提供的方法足夠多,才使得在開發時,能夠針對字串進行更加靈活的操作!應對更多的開發需求!

1) 判斷型別 - 9

方法

說明

string.isspace()

如果 string 中只包含空白符,如 空格 \t \n,則返回 True

string.isalnum()

如果 string 至少有一個字元並且所有字元都是字母或數字則返回 True

string.isalpha()

如果 string 至少有一個字元並且所有字元都是字母則返回 True

string.isdecimal()

如果 string 只包含數字則返回 True,全形數字

string.isdigit()

如果 string 只包含數字則返回 True,全形數字、⑴、\u00b2

string.isnumeric()

如果 string 只包含數字則返回 True,全形數字,漢字數字

string.istitle()

如果 string 是標題化的(每個單詞的首字母大寫)則返回 True

string.islower()

如果 string 中包含至少一個區分大小寫的字元,並且所有這些(區分大小寫的)字元都是小寫,則返回 True

string.isupper()

如果 string 中包含至少一個區分大小寫的字元,並且所有這些(區分大小寫的)字元都是大寫,則返回 True

2) 查詢和替換 - 7

方法

說明

string.startswith(str)

檢查字串是否是以 str 開頭,是則返回 True

string.endswith(str)

檢查字串是否是以 str 結束,是則返回 True

string.find(str, start=0, end=len(string))

檢測 str 是否包含在 string 中,如果 start 和 end 指定範圍,則檢查是否包含在指定範圍內,如果是返回開始的索引值,否則返回 -1

string.rfind(str, start=0, end=len(string))

類似於 find(),不過是從右邊開始查詢

string.index(str, start=0, end=len(string))

跟 find() 方法類似,不過如果 str 不在 string 會報錯(區別)

string.rindex(str, start=0, end=len(string))

類似於 index(),不過是從右邊開始

string.replace(old_str, new_str, num=string.count(old))

把 string 中的 old_str 替換成 new_str,如果 num 指定,則替換不超過 num 次

3) 大小寫轉換 - 5

方法

說明

string.capitalize()

把字串的第一個字元大寫

string.title()

把字串的每個單詞首字母大寫

string.lower()

轉換 string 中所有大寫字元為小寫

string.upper()

轉換 string 中的小寫字母為大寫

string.swapcase()

翻轉 string 中的大小寫

4) 文字對齊 - 3

方法 第二個引數可選填充的字元

說明

string.ljust(width)  

返回一個原字串左對齊,並使用空格填充至長度 width 的新字串

string.rjust(width)

返回一個原字串右對齊,並使用空格填充至長度 width 的新字串

string.center(width)

返回一個原字串居中,並使用空格填充至長度 width 的新字串

5) 去除空白字元 - 3

方法

說明

string.lstrip()

截掉 string 左邊(開始)的空白字元

string.rstrip()

截掉 string 右邊(末尾)的空白字元

string.strip()

截掉 string 左右兩邊的空白字元

6) 拆分和連線 - 5

方法

說明

string.partition(str)

把字串 string 分成一個 3 元素的元組 (str前面, str, str後面)

string.rpartition(str)

類似於 partition() 方法,不過是從右邊開始查詢

string.split(str="", num)

以 str 為分隔符拆分 string,如果 num 有指定值,則僅分隔 num + 1 個子字串,str 預設包含 '\r', '\t', '\n' 和空格,返回為切分後的列表

string.splitlines()

按照行('\r', '\n', '\r\n')分隔,返回一個包含各行作為元素的列表

string.join(list_name)

以 string 作為分隔符,將 list_name 中所有的元素(的字串表示)合併為一個新的字串

字串的切片

切片 方法適用於 字串、列表、元組

切片 使用 索引值 來限定範圍,從一個大的 字串 中 切出 小的 字串

列表 和 元組 都是 有序 的集合,都能夠 通過索引值 獲取到對應的資料

字典 是一個 無序 的集合,是使用 鍵值對 儲存資料

字串[開始索引:結束索引:步長]

 

注意:

指定的區間屬於 左閉右開 型 [開始索引, 結束索引)  =>  開始索引 >= 範圍 < 結束索引

從 起始 位開始,到 結束位的前一位 結束(不包含結束位本身)

從頭開始,開始索引 數字可以省略,冒號不能省略

到末尾結束,結束索引 數字可以省略,冒號不能省略

步長預設為 1,如果連續切片,數字和冒號都可以省略

索引的順序和倒序

在 Python 中不僅支援 順序索引,同時還支援 倒序索引

所謂倒序索引就是 從右向左 計算索引

最右邊的索引值是 -1,依次遞減

演練需求

num_str = "0123456789"# 1. 擷取從 2 ~ 5 位置 的字串
print(num_str[2:6])
# 2. 擷取從 2 ~ `末尾` 的字串 print(num_str[2:]) ​ # 3. 擷取從 `開始` ~ 5 位置 的字串 print(num_str[:6]) ​ # 4. 擷取完整的字串 print(num_str[:]) ​ # 5. 從開始位置,每隔一個字元擷取字串 print(num_str[::2]) ​ # 6. 從索引 1 開始,每隔一個取一個 print(num_str[1::2]) ​ # 倒序切片 # -1 表示倒數第一個字元 print(num_str[-1]) ​ # 7. 擷取從 2 ~ `末尾 - 1` 的字串 print(num_str[2:-1]) ​ # 8. 擷取字串末尾兩個字元 print(num_str[-2:]) # 9. 字串的逆序 print(num_str[::-1])

 

公共方法

Python 內建函式

Python 包含了以下內建函式:

函式

描述

備註

len(item)

計算容器中元素個數

 

del(item)

刪除變數

del 有兩種方式

max(item)

返回容器中元素最大值

如果是字典,只針對 key 比較

min(item)

返回容器中元素最小值

如果是字典,只針對 key 比較

cmp(item1, item2)

比較兩個值,-1 小於/0 相等/1 大於

Python 3.x 取消了 cmp 函式

注意

字串 比較符合以下規則: "0" < "A" < "a"

切片

描述

Python 表示式

結果

支援的資料型別

切片

"0123456789"[::-2]

"97531"

字串、列表、元組

切片 使用 索引值 來限定範圍,從一個大的 字串 中 切出 小的 字串

列表 和 元組 都是 有序 的集合,都能夠 通過索引值 獲取到對應的資料

字典 是一個 無序 的集合,是使用 鍵值對 儲存資料

運算子

運算子

Python 表示式

結果

描述

支援的資料型別

+

[1, 2] + [3, 4]

[1, 2, 3, 4]

合併

字串、列表、元組

*

["Hi!"] * 4

['Hi!', 'Hi!', 'Hi!', 'Hi!']

重複

字串、列表、元組

in

3 in (1, 2, 3)

True

元素是否存在

字串、列表、元組、字典

not in

4 not in (1, 2, 3)

True

元素是否不存在

字串、列表、元組、字典

> >= == < <=

(1, 2, 3) < (2, 2, 3)

True

元素比較

字串、列表、元組

注意

in 在對 字典 操作時,判斷的是 字典的鍵

in 和 not in 被稱為 成員運算子

成員運算子

成員運算子用於 測試 序列中是否包含指定的 成員

運算子

描述

例項

in

如果在指定的序列中找到值返回 True,否則返回 False

3 in (1, 2, 3) 返回 True

not in

如果在指定的序列中沒有找到值返回 True,否則返回 False

3 not in (1, 2, 3) 返回 False

注意:在對 字典 操作時,判斷的是 字典的鍵

完整的 for 迴圈語法

在 Python 中完整的 for 迴圈 的語法如下:

for 變數 in 集合:
    迴圈體程式碼
else:
    沒有通過 break 退出迴圈,迴圈結束後,會執行的程式碼

 

應用場景

在 迭代遍歷 巢狀的資料型別時,例如 一個列表包含了多個字典

需求:要判斷 某一個字典中 是否存在 指定的 值

如果 存在,提示並且退出迴圈

如果 不存在,在 迴圈整體結束 後,希望 得到一個統一的提示

students = [
    {"name": "張三",
     "age": 20,
     "gender": True,
     "height": 1.7,
     "weight": 75.0},
    {"name": "小美",
     "age": 19,
     "gender": False,
     "height": 1.6,
     "weight": 45.0},
]
find_name = "張三"

for stu_dict in students:

    print(stu_dict)
# 判斷當前遍歷的字典中姓名是否為find_name if stu_dict["name"] == find_name: print("找到了") ​ # 如果已經找到,直接退出迴圈,就不需要再對後續的資料進行比較 breakelse: print("沒有找到") ​ print("迴圈結束")