Python-----Strings字符串

Python教程正在更新中:
查看Python教程目錄

字符串,在維基百科中的定義如下:

字符串(String),是由零個或多個字符組成的有限串行。一般記爲 s=a[1]a[2]…a[n]。

根據這個定義,很清楚的瞭解到Hello World就是一個字符串,不論是那種字符,都可以認爲是字符串,包括一個空格,一個emojie等等。
嚴格的來講,Python中的字符串是一種對象類型,這種類型用str表示,通常採用單引號 ’ XXX ’ ,或雙引號 " XXX " 包起來。
對於一句話:Python Course for Beginners我們就可以用如下兩種方式表示:

course = 'Python Course for Beginners'
course = "Python Course for Beginners"

在這種條件下,兩種表示方式都能比較好的表示這個字符串。
但是對於:Python’s Course for Beginners這個字符串使用雙引號包裹字符串可以正常運行如下:

course = "Python's Course for Beginners"

如果用單引號呢:

course = 'Python's Course for Beginners'

運行發現:
在這裏插入圖片描述
報錯了。對於單引號前後需要匹配但是在這句話中單引號出現了三次,程序已經將前兩個單引號進行匹配,並不清楚第三個單引號的作用是什麼,於是程序報錯了,如何解決這個問題呢,有如下兩種方法:
方案1:

course = "Python's Course for Beginners"

使用雙引號,既然之前使用雙引號可以解決問題,那麼爲什麼不直接使用雙引號呢。
方案2:

course = 'Python\'s Course for Beginners'

使用轉義字符 \ ,轉義字符的意義就是不讓某個符號表示一種含義而是讓這個字符表現另一種含義,轉義字符的作用就是能夠轉變符號的含義。使用了轉義字符後,這個字符就是去了他的特殊含義,就變成了單純的字符形式/

那麼如果我想輸入一封信的格式呢,如果用多個變量,是不是有點浪費空間呢,同樣Python可以使用如下形式

course = '''
Hi John

Here is our first email to you 

Thank you,
The support team
'''
print(course)

之後

變量無類型,對象有類型*
例如對於代碼

a = 5

本質相當於變量 a 附在了對象 5 上面,這個語句被稱爲賦值語句
同樣,對於字符串類型的對象,也是這樣,同樣能使用賦值語句將對象和變量聯繫起來

char = "Hello Wrold"

同樣,我們還可以用type模塊檢測變量的類型

char = "Hello Wrold"
print(type(char))

得到結果如下:
在這裏插入圖片描述
我們之前介紹過拼接字符串,我們現在正式介紹以下字符串的拼接
之前我們介紹的字符串的拼接如下,就是將兩個字符串用加法的形式連接起來

print('Py' + 'thon')

得到的輸出結果是:Python很顯然

同時字符串也可以乘以數字,如下

print('Python' * 5)

輸出得到的結果如圖
在這裏插入圖片描述
就是將字符串輸出n次,但是對於字符串的減法等等是沒有意義的,同時程序也會報錯。

如果我們需要輸出python3.7呢
試試如下代碼?

a = 3.7
b = "Python"
print(a + b)

發現運行後報錯了
在這裏插入圖片描述
顯示數字和字符串不能連接,用 ’ + ‘ 連接起來的兩個類型必須是同一類型
推薦使用如下幾種方式實現:
1.強制類型轉換

a = 'Python'
b = 3.7
print(a + str(b))

將數字轉換成字符串的函數 str()
2.repr() 函數

a = 'Python'
b = 3.7
print(a + repr(b))

這個函數相當於轉義字符,將b轉換爲合法的Python表達式。
同樣在字符串連接的時候Python還爲我們提供了另一種輸出的方式:

first = 'Lpy'
last = '_Now'
msg = f'{first}[{last}] is a coder'
print(msg)

對於兩個變量我們可以用如上的格式進行連接,f開頭,後面用單引號,大括號內的內容是定義的變量,其他是字符串。

具體repr()和str()兩個函數的區別可以在谷歌查找。
網站中找到的英文結果如下,稍後有時間會翻譯出來

  1. When should i use str() and when should i use repr() ?
    Almost always use str when creating output for end users.
    repr is mainly useful for debugging and exploring. For example, if you suspect a string has non printi
    ng characters in it, or a float has a small rounding error, repr will show you; str may not.
    repr can also be useful for for generating literals to paste into your source code. It can also be used f
    or persistence (with ast.literal_eval or eval), but this is rarely a good idea–if you want editable persi
    sted values, something like JSON or YAML is much better, and if you don’t plan to edit them, use pic
    kle.
    2.In which cases i can use either of them ?
    Well, you can use them almost anywhere. You shouldn’t generally use them except as described ab
    ove.
    3.What can str() do which repr() can’t ?
    Give you output fit for end-user consumption–not always (e.g., str([‘spam’, ‘eggs’]) isn’t likely to be
    anything you want to put in a GUI), but more often than repr.
    4.What can repr() do which str() can’t
    Give you output that’s useful for debugging–again, not always (the default for instances of user-cr
    eated classes is rarely helpful), but whenever possible.
    And sometimes give you output that’s a valid Python literal or other expression–but you rarely want
    to rely on that except for interactive exploration.

Python的轉義字符
在字符串輸入的過程中,通常需要輸入一些特殊的符號,這些時候就需要使用轉義字符,之前介紹過轉義字符的意義,就是不表示符號本身的意義,而是表示符號的另一重含義,如下列出常用的轉義字符

轉義字符 作用描述
\ (在行尾時) 續行符
\ 反斜槓符號
單引號
" 雙引號
\a 響鈴
\b 退格(Backspace)
\e 轉義
\000
\n 換行
\v 縱向製表符
\t 橫向製表符
\r 回車
\f 換頁
\oyy 八進制數,yy 代表的字符,例如:\o12 代表換行(ASCII)
\xyy 十六進制數,yy 代表的字符,例如:\x0a 代表換行(ASCII)
other 其它的字符以普通格式輸出

個人感覺轉義字符用的不多,大家可以自己下去嘗試,這裏不佔篇幅挨個嘗試了。

Python String Methods Python的方法/函數
之前說過Python中有很多輪子,這些輪子/模塊大大節省了我們編程的時間和精力,但是學了這麼多,我們還沒體會到這些的好處,接下來我們用一些常見的函數來介紹下Python中用於string(字符串)的函數
比如對於如下的字符串:Python for Beginners
我們有很多函數供操作,我們在這裏只舉一些很常見的栗子,更多的大家可以谷歌,請仔細觀察函數是如何調用的,不同的函數調用方式也不盡相同
len()

print(len(course))

運行後輸出的是字符串的長度20,這裏是每一個字符都算一個單位的長度,當然空格也不例外,這個len函數就可以求出字符串的長度
upper()

print(course.upper())

upper()函數是將字符串內的所有字符都轉換爲大寫運行這個函數的輸出結果是PYTHON FOR BEGINNERS,可以發現這個函數將所有小寫字母全部轉化爲大寫字母進行輸出了。
lower()

print(course.lower())

lower()函數是將字符串中所有字母都轉換爲小寫並輸出,得到的結果如下:python for beginners
同樣還有如下函數:
capitalize() 首字母大寫
isupper() 判斷字符串中的字母是否全是大寫
islower() 判斷字符串中的字母是否全是小寫
等等
find()

print(course.find('P'))

find(’ X ')函數是在字符串中尋找這個字母,並返回這個字母的位置,我們可以將字符串視爲很多字符組成的,第一個字符的編號爲0以此類推,並且find函數在尋找時區分大小寫,如果找到返回找到的第一個字符的位置,如果沒有則返回0。同理這個函數同樣可以找一個字符串的位置,如下;

print(course.find('Beginners'))

找到則返回這個字符串在原字符串第一個字母的首位置,否咋則返回-1
in

print('Python' in course)
print('python' in course)

in函數返回的時這個字符或者字符串在這個字符串中是否存在,並區分大小寫,存在返回True不存在則返回False
上面代碼第一個返回True,第二個返回False
replace()

print(course.replace('Beginners', 'Absolute Beginners'))
print(course.replace('P', 'J'))

replace(‘A’,‘B’)函數可以將字符串中的A字符或者字符串替換爲B字符或者字符串,運行上述代碼後,輸出結果爲

Python for Absolute Beginners
Jython for Beginners

max()

print(max(course))

max()函數返回字符串中ASCII最大的哪個字符,計算機中的字符時按ASCII編碼的,具體ASCII編碼可以在谷歌查得到。
cmp()
cmp(string1, string2)是將兩個字符串中的字符挨個進行比較,如果返回的數值小於0,說明string1小於string2;如果返回數值等於0,說明string1等於string2;如果返回數值大於0,說明string1大於string2
更多關於Python的函數可以區谷歌學習,這裏不再過多介紹。

字符串
講了這麼多字符串,其實我們可以將字符串視爲一個個小格子,每一個格子裏都只裝有一個字符,就像每一個房間只能住一個人一樣,並且每個房間都有自己的編號,這樣我們查詢每一個字符就可以很方便的查詢了。從零開始,對於字符串:"Python for Beginners"對應關係如下:
在這裏插入圖片描述
如何訪問一個固定的字符呢,可以按照數字對應關係:

course = 'Python for Beginners'
print(course[0])

這樣就可以輸出這個字符串中第一個字符了
第幾個就對應第幾個字符。
此時我們探究了從0開字符串中的字符,那麼數字如果是負數呢
我們可以嘗試一下:

course = 'Python for Beginners'
print(course[-1])
print(course[-2])

此時輸出結果爲,s和r,這樣就是從字符串末尾開始倒着數的位數,對應關係如下:
在這裏插入圖片描述
如果訪問的數字超出了範圍呢,程序就會報錯,因爲在這個字符串中是不存在這個格子的。

如果我們需要訪問一段區間內的字符呢

course = 'Python for Beginners'
print(course[0:3])
print(course[1:])
print(course[:5])
print(course[:])

觀察輸出

Pyt
ython for Beginners
Pytho
Python for Beginners

觀察輸出我們發現如果需要訪問一段區間內的字符,可以用上面的幾種方式訪問
第二行是從0到3的字符,並且都是左閉右開,也就是[0,3)區域內的字符(下同)
第三行是訪問從1到字符串結尾的字符,第四行是訪問從字符串開頭到4的字符,如果冒號前後不填寫數字的話,程序默認是到開頭或者結尾
第五行是訪問整個字符串。
那麼對於下面這行代碼呢

course = 'Python for Beginners'
print(course[1:-1])

運行後得知,就是從第一位訪問到第18位,具體爲什麼很好理解,按照上面字符和數字的對應就可以很直觀的觀察到

字符串的格式化輸出
什麼是格式化呢?
在維基百科中是這樣解釋的:

格式化是指對磁盤或者磁盤中的分區(partition)進行初始化的一種操作,這種操作通常會導致現有的磁盤或分區中的文件被清除,格式化通常分爲低級格式化個高級格式化,如果沒有特殊指明,對硬盤的格式化通常是指高級格式化,而對軟盤的格式化通常同時包括這兩者。

詞條鏈接
對於格式化字符串,維基百科中是這樣解釋的:

格式化字符串(英語:format string),是一些程序設計語言在格式化輸出API函數中用於指定輸出參數的格式與相對位置的字符串參數,例如C、C++等程序設計語言的printf類函數,其中的轉換說明(conversion specification)用於把隨後對應的0個或多個函數參數轉換爲相應的格式輸出;格式化字符串中轉換說明以外的其它字符原樣輸出。

詞條鏈接
通俗的來講,如果需要將字符串格式化,就要先制定一個模板,在這個字符串的模板中的某幾個位置中流出空位來,然後在這些空位中填上這些字符串,那麼,這些程序如何知道我要給這個地方空出來位置呢,這時候就需要將這些空位用一個符號來表示,這樣的符號被稱爲佔位符,佔位符僅僅是佔據位置但並不輸出佔位符。
使用的方法如下:

print('Python for %s' % 'Beginners')

這樣就能輸出字符串:Python for Benginners
而Python中有很多種的佔位符,列表如下:

佔位符 說明
%s 字符串(採用str()顯示)
%r 字符串(採用repr()顯示)
%c 單個字符
%b 二進制整數
%d 十進制整數
%i 十進制整數
%o 八進制整數
%x 十六進制整數
%e 指數(基底爲e)
%E 指數(基地爲E)
%f 浮點數
%F 浮點數
%g 指數或浮點數
%G 指數或浮點數

舉個栗子:

print('Python %d' % 3)

同樣的,一串語句中也可以設置多個佔位符

print('Python %d.%d' % (3,7))

這樣的格式使用佔位符,輸出的就是Python 3.7
同樣佔位符還有很多類似的操作,比如輸出寬度等等,如下:

常用字符串的方法Methonds
split
將字符串根據某個分隔符進行分解
具體操作方式如下:

course = 'Python for Beginners'
print(course.split(' '))

輸出結果:
在這裏插入圖片描述
運用空格作爲分割得到了列表(list)的返回值,後續內容會講到列表

strip/lstrip/rstrip
string.strip() 去掉字符串兩端的空格
string.lstrip() 去掉字符串最左邊的空格
string.rstrip() 去掉字符串最右邊的空格
具體實例如下:

course = ' Python for Beginners '
print(course.strip())
print(course.lstrip())
print(course.rstrip())

運行結果:
在這裏插入圖片描述

查看上一篇:一個小栗子和一個小練習
查看下一篇:
查看目錄:查看Python教程目錄

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章