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

Python之字符串

編輯:Python

字符串基本特點

        字符串的本質是:字符序列。Python的字符串是不可變的,我們無法對原字符串做任何修改。但,可以將字符串的一部分復制到新創建的字符串,達到“看起來修改”的效果。

Python不支持單字符類型選,單字符也是作為一個字符串使用的。


字符串的編碼

        Python3直接支持Unicode,可以表示世界上任何書面語言的字符。Python3的字符默認就是16為編碼的Unicode編碼,ASCⅡ是Unicode編碼的子集。所以一個漢字在Unicode編碼中表示的長度是1。

        使用內置函數ord()可以把字符轉成對應Unicode碼。

        使用內置函數chr()可以把十進制數字轉換成對應的字符。


引號創建字符串

        我們可以通過單引號或雙引號創建字符串。例如:

       可以通過使用兩種引號創建本身就包含引號頂點字符串,而不使用轉義字符。例如:

       連續三個單引號或三個雙引號,可以幫助我們創建多行字符串。例如


空字符串和len()函數

        Python允許空字符串的存在,不包含任何字符且長度為0。len()用於計算字符串含有多少字符。例如:


轉義字符

        我們可以使用"\+特殊字符",實現某些難以用字符表示的效果。例如:換行等。常見的的注意字符如下:

轉義字符描述\(在行尾時)續行符\\反斜槓符號\'單引號\*雙引號\b退格(Backspace)\n換行\t橫向制表符\r回車


字符串拼接

        1.可以使用+號將多個字符串拼接起來。例如:

                (1)如果+兩邊都是字符串,則拼接

                (2)如果+兩邊都是數字,則加法運算

                (3)如果+兩邊類型不同,則拋出異常

       2.可以將多個字符串直接放在一起拼接,例如:

         注意:在字符串拼接中,+兩邊可以是字符串或變量,而直接放在一起拼接只能是字符串不能是變量。


字符串賦值

        可以使用*實現字符串復制,可以復制字符串,也可以復制指向字符串的變量。 例如:


不換行打印

        在前面調用print時,會自動打印一個換行符。有事,我們不想換行,不想自動添加換行符。我們可以自己通過參數end="任意字符串"。實現末位想添加任何內容:

         在源文件中:

       運行結果:


 從控制台讀取字符串

        我們可以使用input()從控制台讀取鍵盤輸入的內容。在input()括號中的可以設置字符串,作為輸入提示信息:


str()實現數字轉型字符串

        str()可以幫助我們將其他數據類型轉換為字符串例如:

       當我們調用print()函數是,解釋器自動調用了str()將非字符對象轉成了字符串。


使用[]提取字符串

        字符串的本質是字符序列,我們可以通過在字符串後面添加[],在[]裡面指定偏移量,可以提取單個字符串。

        正向搜索:

                最左側的第一字符,偏移量是0,第二個偏移量是1,一次類推。直到len(str)-1為止。

        反向搜索:

                最右側第一字符,偏移量是-1.倒數第二個是-2,以此類推,直到-len(str)為止。


repalce()實現字符串替換

        字符串是“不可改變“”的,我們可以通過[]可以獲取字符串指定位置的字符,但我們不能改變字符串。我們嘗試改變字符串中的某個字符串,發現報錯了:

         字符串不可改變。但是,我們的確有時候需要替換某些字符。這時,只能通過創建新的字符串來實現。

·


        整個過程中,實際上我們是創建了新的字符串對象, 而變量a指向的字符串對象並沒有改變。但如果將新的字符串對象指向變量a,變量a引用的對象發生了改變。內存圖如下:


字符串切片slice操作

        切片slice操作可以讓我們快速的提取子字符串。標准格式為:

                [起始偏移量 start:終止偏移量 end:步長 step]                  典型操作(三個數為正數的情況下): 操作和說明示例結果[:]        提取整個字符串"abcdef"[:]"abcdef"[start:]從頭開始直到end-1"abcdef"[2:]"cdef"[:end]從頭開始直到end-1"abcdef"[:2]"ab"[start:end]從start到end-1"abcdef"[2:4]"cd"[start:end:step]從start提取到end-1,步長是step

"abcdef"[1:5:2]

"bd"

        其它操作(三個量為負數)的情況:

示例說明結果"abcdefghijklmnopqrstuvwxyz"[-3:]倒數第三個"xyz""abcdefghijklmnopqrstuvwxyz"[-8:-3]倒數第八個到倒數第三個(包頭不包尾)"stuvw""abcdefghijklmnopqrstuvwxyz"[::-1]步長為負,從右到左反向提取'zyxwvutsrqpon mlkjihgfedcba'

        切片操作時,起始偏移量和終止偏移量不在[0:字符串長度-1]這個范圍,也不會報錯。例如:

        1.將"to be or not to be"字符串倒序輸出

        2.將"sxtsxtsxtsxtsxt"字符串中所有的 s 輸出


split()分割和join()合並

        split()可以基於指定分割符將字符分隔成多個子字符串(存儲到列表中)。如果不指定分割符,則默認使用空白字符(換行符/空格/制表符)。示例代碼如下:

         join()的作用和split()作用剛好相反,用於將一系列子字符串(列表)連接起來(字符串)。示例代碼如下:

        字符串拼接要點:

        使用字符傳拼接符+,會產生新的字符串對象,因此不推薦使用+來拼接字符串。推薦使用join函數,因為join函數在拼接字符串之前按會計算所有字符串的長度,然後逐一拷貝,僅新建一次對象。

        測試+拼接符和join(),不同的效率:

        運行結果:


 字符串駐留機制和字符串比較

         字符串駐留:僅保存一份相同且不可變字符串的方法,不同的值被存放在字符串駐留池中。Python支持字符串駐留機制,對於符合要要求的字符串(僅包含下劃線(_)、字母、數字)會啟用字符串駐留機制。

         字符串駐留發生在compile_time,而不是run_time。


字符串比較和同一性

        我們可以直接使用==,!=對字符串進行比較,是否含有相同的字符。

        我們使用is/ not is,判斷兩個對象是否同一個對象。比較的是對象的地址,即id(obj1)是否和id(obj2)相等。


成員操作符號

        in / not in 關鍵字,判斷某個字符串(子字符串)是否存在與字符串中。


 字符串常用方法

        字符串有很多常用的方法,我們需要熟悉。


常用查找方法

        以一段文本作為測試:

        a='我叫彭XX,今年20,我在JXUST大學讀書。我們沒有女朋友,xdm都出去陪女朋友,而我只能敲代碼,哇,為什麼,同樣是人,為什麼我還要敲代碼!算了,我還是得敲,老子好好學習,卷死它們,不說了,敲代碼去了!'

   

方法和使用示例說明結果len(a)字符串長度102a.startswith('我叫彭XX')以指定字符串開頭Truea.endswith('敲代碼去了!')以指定字符串結尾Truea.find('彭')第一次出現指定字符串的位置2a.rfind('了')最後一次出現指定字符串的位置100a.count('為什麼')指定字符串出現了幾次2a.isalnum()所有字符全是字母或數字False


去除首尾信息

        我們可以通過strip()去除字符串首尾指定信息。通過lstrip()去除字符串左邊指定信息,rstrio()去除字符串右邊指定信息。


大小寫轉換

        編程中關於字符串大小寫轉換的情況,經常遇見。相關方法匯總如下:

        設定一個測試變量:

        a="Phh is 'single'"

示例說明結果a.capitalize()產生新的字符串,首字母大寫"Phh is 'single'"a.title()產生新的字符串,每個單詞都首字母大寫"Phh Is 'Single'"a.upper()產生新的字符串,所有字母全轉成大寫"PHH IS 'SINGLE'"a.lower()產生新的字符串,所有字符全轉成小寫"phh is 'single'"a.swapcase()產生新的字符串,所有字母大小寫轉換"pHH IS 'SINGLE'"


格式排版

        center()、ljust()、rjust()這三個函數用於對字符串實現排版。


其它方法

方法說明isalnum()是否為字母或數字isalpha()檢測字符串是否只含字母(包括漢字)isdigit()檢測字符串是否只由數字組成isspace()檢測是否為空字符串(或者說是否全為空格)issupper()是否為大寫字母islower()是否為小寫字母


字符串的格式化

format()基本用法

         Python2.6 開始,新增一種格式化字符串函數str.format(),它增強了字符串格式化的功能。

        基本語法是通過{}和:來代替以前的%。

        format()函數可以接受不限個參數,位置可以不按順序。

        參數格式:'{[index][:[fill] align][sign][#][width][.precision][type]} {……}{……} '.format()

        以上參數的意義是:
        注意,格式中的[ ]內的參數都是可選參數,可以使用也可以不使用。

        index:指定冒號:後面除出現的參數在formart()中的索引值,如果沒有,則按format()中的默認順序分配。

        fill:指定空白處的填充符號,默認為空白填充。

        align:指定數字的對齊方式。

align參數含義<right-aligned 左對齊(對於大部分對象時為默認)>right-aligned 右對齊 (對於數字時為默認)=數據右對齊,同時將符號放置在填充內容的最左側,該選項只對數字類型有效^數據居中,此選項需和 width 參數一起使用

        

        

        sign:指定有無符號數。

sign參數含義+正數前面添加 ‘ + ’ ,負數前面加 ‘ - ’-正數前面不添加 ‘ + ’ ,負數前面加 ‘ - ’space正數前面添加 ‘ 空格 ’ ,負數前面加 ‘ - ’#對於二進制數、八進制數和十六進制數,使用此參數,各進制數前會分別顯示 0b、0o、0x前綴;反之則不顯示前綴

        width:指定輸出數據時所占的寬度

        precision:如果後面存在type參數,則指的是保留小數的位數,

                              如果type參數不存在,則是指有效數字的位數

        type:指定輸出數據的具體類型

type參數含義s對字符串類型格式化d十進制整數c將十進制整數轉換成對應的Unicode字符e or E轉換成科學計數法後,再格式化輸出g or G指定在e和f或(E和F)中切換b將十進制自動轉換成二進制表示,再格式化輸出o將十進制自動轉換成八進制表示,再格式化輸出x or X將十進制自動轉換成十六進制表示,再格式化輸出f or F轉換成浮點數(默認小數點後6為),再格式化輸出%顯示白百分比(默認顯示小數點後6位)

 可變字符串

        在Python中,字符串屬於不可變對象,不支持原地修改,如果需要修改其中的值,智能創建新的字符串對象。但是,經常我們的確需要原地修改字符串,可以使用io.StringIO對象或array模塊。

 

 實操作業

1.從控制台輸入用戶的月薪,進行運算計算出年薪。打印輸出用戶的年薪

 2.使用字符串復制,用計算機打印出“愛你一百遍”,打印 100 次

 

 3.判斷如下輸出結果,並文字解釋原因:

        >>> a = "abd_33"         >>> b = "abd_33"         >>> c = "dd#"         >>> d = "dd#"         >>> a is b         #輸出 true or false?         >>> c is d         #輸出 true or false?         字符串駐留機制 4. 寫出如下代碼打印的結果:        >>> c = "名字是{name},年齡是{age}"         >>> c.format(age=19,name='phh') '名字是phh,年齡是19'


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