標籤:expr 檢查 接受 語言 檢索 範圍 寬度 置中 執行
一、編碼
電腦只能處理數字,如果要處理文本,就必須先把文本轉換為數字才能處理。最早的電腦在設計時採用8個位元(bit)作為一個位元組(byte),所以,一個位元組能表示的最大的整數就是255(二進位11111111=十進位255),如果要表示更大的整數,就必須用更多的位元組。比如兩個位元組可以表示的最大整數是65535,4個位元組可以表示的最大整數是4294967295。
ASCII編碼(美國資訊交換標準代碼),它通常是用1個位元組表示一個字元,它用數字0~127來表示電腦鍵盤上有的字元以及被稱為控制碼的某些特殊值,用於協調資訊的發送和接受。大寫字母A~Z由值65~90表示,小寫字母a~z由值97~122表示。
Unicode編碼把所有語言都統一到一套編碼裡,但它最常用的是用兩個位元組表示一個字元(如果要用到非常偏僻的字元,就需要4個位元組)。現代作業系統和大多數程式設計語言都直接支援Unicode。
如果統一成Unicode編碼,亂碼問題從此消失。但是,如果文本基本上全部是英文的話,用Unicode編碼比ASCII編碼需要多一倍的儲存空間,在儲存和傳輸上就十分不划算。所以出現了把Unicode編碼轉化為“可變長編碼”的UTF-8編碼。
UTF-8編碼把一個Unicode字元根據不同的數字大小編碼成1-6個位元組,常用的英文字母被編碼成1個位元組,漢字通常是3個位元組,只有很生僻的字元才會被編碼成4-6個位元組。如果你要傳輸的文本包含大量英文字元,用UTF-8編碼就能節省空間的。實際上ASCII編碼可以被看成是UTF-8編碼的一部分。
以上是ASCII、Unicode和UTF-8的關係,總結一下現在電腦系統通用的字元編碼工作方式:在電腦記憶體中,統一使用Unicode編碼,當需要儲存到硬碟或者需要傳輸的時候,就轉換為UTF-8編碼。
在最新的Python 3版本中,字串是以Unicode編碼的,即Python的字串支援多語言的。在操作字串時,我們經常遇到str和bytes的互相轉換。為了避免亂碼問題,應當始終堅持使用UTF-8編碼對str和bytes進行轉換。str通過encode()方法可以編碼為指定的bytes;相反,把bytes通過decode()方法可變為str。
二、字串操作
它通過將兩個字串粘合在一起來構建字串;
1 str1 = "Good"2 str2 = "Luck"3 str3 = str1 + str24 print(str3)
結果為:
1 GoodLuck
它通過字串與多個自身串連來構建字串;
1 str1 = "Good"2 str2 = "Luck"3 str3 = str1 * 24 print("str3:", str3)5 str4 = 3 * str26 print("str4:", str4)
結果為:
1 str3: GoodGood2 str4: LuckLuckLuck
它給出字串含有多少個字元;
str = "GoodLuck"
print("str的長度為:", len(str))
結果為:
str的長度為: 8
字串是一個字元序列,通常訪問組成字串的單個字元可以通過索引來完成,在n個字元的字串中,索引從0開始,n-1結束。Python中還允許用負數索引,從字串右端索引。字串索引的一般形式為:
<string>[<expr>]
1 str = "GoodLuck"2 print("str的長度為:", len(str))3 print("str第一個字元:", str[0])4 print("str第三個字元:", str[2], "str第五個字元:", str[4])5 print("str最後一個字元:", str[len(str)-1])6 print("str最後一個字元:", str[-1])7 print("str倒數第二個字元:", str[-2])
結果為:
1 str的長度為: 82 str第一個字元: G3 str第三個字元: o str第五個字元: L4 str最後一個字元: k5 str最後一個字元: k6 str倒數第二個字元: c
索引返回的是字串的單個字元,若需要從字串中訪問連續的字元序列或子字串,則可以用切片來實現。切片的形式是:
<string>[<start>: <end>]
切片產生從start直到(但不包括)end位置給出的子串。
1 str = "Hi jack,Good Luck!"2 print("str[0:3]:", str[0:3])3 print("str[3:14]:", str[3:14])4 print("str[:8]:", str[:8])5 print("str[8:]:", str[8:])6 print("str[:]:", str[:])
結果為:
1 str[0:3]: Hi 2 str[3:14]: jack,Good L3 str[:8]: Hi jack,4 str[8:]: Good Luck!5 str[:]: Hi jack,Good Luck!
三、字串內建函數
首字元會轉換成大寫,其餘字元會轉換成小寫。首字元如果是非字母,首字母不會轉換成大寫,會轉換成小寫。
返回一個指定的寬度 width 置中的字串,fillchar 為填充的字元,預設為空白格。
- count(sub, start= 0,end=len(string))
用於計字串裡某個子串的次數。選擇性參數為在字串搜尋的開始與結束位置。
- endswith(suffix[, start[, end]])
用於判斷字串是否以指定尾碼結尾,如果以指定尾碼結尾返回True,否則返回False。選擇性參數"start"與"end"為檢索字串的開始與結束位置。
find(str, beg=0 end=len(string))
檢測字串中是否包含子字串 str ,如果指定 beg(開始) 和 end(結束) 範圍,則檢查是否包含在指定範圍內,如果指定範圍內如果包含指定索引值,返回的是索引值在字串中的起始位置。如果不包含索引值,返回-1。
index(str, beg=0, end=len(string))
跟find()方法一樣,只不過如果str不在字串中會報一個異常。
isalnum()
如果字串至少有一個字元並且所有字元都是字母或數字則返 回 True,否則返回 False。
isalpha()
如果字串至少有一個字元並且所有字元都是字母則返回 True, 否則返回 False。
islower()
如果字串中包含至少一個區分大小寫字元,並且所有這些(區分大小寫)字元都是小寫,則返回 True,否則返回 False。
isnumeric()
如果字串中只包含數字字元,則返回 True,否則返回 False。
isspace()
如果字串中只包含空白,則返回 True,否則返回 False。
istitle()
如果字串是標題化的(見 title())則返回 True,否則返回 False。
isupper()
如果字串中包含至少一個區分大小寫字元,並且所有這些(區分大小寫)字元都是大寫,則返回 True,否則返回 False。
join(seq)
以指定字串作為分隔字元,將 seq 中所有的元素(的字串表示)合并為一個新的字串。
len(string)
返回字串長度。
ljust(width[, fillchar])
返回一個原字串靠左對齊,並使用 fillchar 填充至長度 width 的新字串,fillchar 預設為空白格。
lower()
轉換字串中所有大寫字元為小寫。
lstrip()
截掉字串左邊的空格或指定字元。
max(str)
返回字串 str 中最大的字母。
min(str)
返回字串 str 中最小的字母。
replace(old, new [, max])
把將字串中的 str1 替換成 str2,如果 max 指定,則替換不超過 max 次。
rfind(str, beg=0,end=len(string))
類似於 find()函數,不過是從右邊開始尋找。
rindex( str, beg=0, end=len(string))
類似於 index(),不過是從右邊開始。
rjust(width,[, fillchar])
返回一個原字串靠右對齊,並使用fillchar(預設空格)填充至長度 width 的新字串。
rstrip()
刪除字串字串末尾的空格。
split(str="", num=string.count(str))
num=string.count(str)) 以 str 為分隔字元截取字串,如果 num 有指定值,則僅截取 num 個子字串。
splitlines([keepends])
按照行(‘\r‘, ‘\r\n‘, \n‘)分隔,返回一個包含各行作為元素的列表,如果參數 keepends 為 False,不包含分行符號,如果為 True,則保留分行符號。
strip([chars])
在字串上執行 lstrip()和 rstrip()。
swapcase()
將字串中大寫轉換為小寫,小寫轉換為大寫。
title()
返回"標題化"的字串,就是說所有單詞都是以大寫開始,其餘字母均為小寫(見 istitle())。
upper()
轉換字串中的小寫字母為大寫。
zfill (width)
返回長度為 width 的字串,原字串靠右對齊,前面填充0。
isdecimal()
檢查字串是否只包含十進位字元,如果是返回 true,否則返回 false。
Day 3 Python字串