
復(fù)習(xí)Python中的字符串知識點(diǎn)
在Python中創(chuàng)建字符串對象非常容易。只要將所需的文本放入一對引號中,就完成了一個新字符串的創(chuàng)建(參見清單 1)。如果稍加思考的話,您可能會感到有些困惑。畢竟,有兩類可以使用的引號:單引號 (') 和雙引號 (")。幸運(yùn)的是,Python 再一次使這種問題迎刃而解。您可以使用任意一類引號來表示 Python 中的字符串,只要引號一致就行。如果字符串是以單引號開始,那么必須以單引號結(jié)束,反之亦然。如果不遵循這一規(guī)則,則會出現(xiàn) SyntaxError 異常。
清單 1. 在 Python 中創(chuàng)建字符串
>>> sr="Discover Python"
>>> type(sr)
>>> sr='Discover Python'
>>> type(sr)
>>> sr="Discover Python: It's Wonderful!"
>>> sr='Discover Python"
File "", line 1
sr='Discover Python"
^
SyntaxError: EOL while scanning single-quoted string
>>> sr="Discover Python: \
... It's Wonderful!"
>>> print sr
Discover Python: It's Wonderful!
從清單 1 中可以看出,除了字符串用適當(dāng)?shù)囊柪ㄆ饋碇?,另外還有兩個重要方面。第一,在創(chuàng)建字符串時,您可以混合使用單引號和雙引號,只要字符串在開始位置和結(jié)束位置使用同一類型的引號。這種靈活性允許 Python 容易地保留常規(guī)的文本數(shù)據(jù),這些常規(guī)的文本數(shù)據(jù)可能需要使用單引號來表示簡寫的動詞形式或所屬關(guān)系,以及使用雙引號來表示引述文本。
第二,如果字符串用一行表示太長,您可以使用 Python 連續(xù)字符:反斜線 (\) 來對字符串進(jìn)行折行。從內(nèi)部機(jī)制看,在創(chuàng)建字符串時換行符會被忽略,在打印字符串時可以看出這一點(diǎn)。您可以結(jié)合使用這兩個功能,來創(chuàng)建包含較長段落的字符串,如清單 2 所示。
清單 2. 創(chuàng)建長字符串
>>> passage = 'When using the Python programming language, one must proceed \
... with caution. This is because Python is so easy to use and can be so \
... much fun. Failure to follow this warning may lead to shouts of \
... "WooHoo" or "Yowza".'
>>> print passage
When using the Python programming language, one must proceed with caution.
This is because Python is so easy to use, and can be so much fun.
Failure to follow this warning may lead to shouts of "WooHoo" or "Yowza".
編者注:上面的示例已折行處理,這樣使頁面布局更合理。事實(shí)上,它本來顯示為一個較長的行。
注意,當(dāng)打印 passage 字符串時,所有格式將被刪除,只保留一個非常 長的字符串。通常,您可以使用控制符來表示字符串中的簡單格式。例如,要表示一個新行開始,您可以使用換行控制符 (\n);要表示插入一個制表符(預(yù)設(shè)空格數(shù)),可以使用制表符控制符 (\t),如清單 3 所示。
清單 3. 在字符串中使用控制符
>>> passage='\tWhen using the Python programming language, one must proceed\n\
... \twith caution. This is because Python is so easy to use, and\n\
... \tcan be so much fun. Failure to follow this warning may lead\n\
... \tto shouts of "WooHoo" or "Yowza".'
>>> print passage
When using the Python programming language, one must proceed
with caution. This is because Python is so easy to use, and
can be so much fun. Failure to follow this warning may lead
to shouts of "WooHoo" or "Yowza".
>>> passage=r'\tWhen using the Python programming language, one must proceed\n\
... \twith caution. This is because Python is so easy to use, and\n\
... \tcan be so much fun. Failure to follow this warning may lead\n\
... \tto shouts of "WooHoo" or "Yowza".'
>>> print passage
\tWhen using the Python programming language, one must proceed\n\
\twith caution. This is because Python is so easy to use, and\n\
\tcan be so much fun. Failure to follow this warning may lead\n\
\tto shouts of "WooHoo" or "Yowza".
清單 3 中的第一段按照您預(yù)期的方式使用了控制符。該段已具備良好的格式,閱讀非常方便。第二個示例雖然也進(jìn)行了格式化處理,但它引用的是所謂的原始字符串,即沒有應(yīng)用控制符的字符串。您始終可以認(rèn)出原始字符串,因為該字符串的起始引號的前面有一個 r 字符,它是 raw 的縮寫。
我不了解您講的有什么可取之處,雖然這種方法可行,但創(chuàng)建一個段落字符串似乎非常因難。當(dāng)然一定有更好的方法。與往常一樣,Python 提供了一種非常簡單的方法用于創(chuàng)建長字符串,該方法可保留創(chuàng)建字符串時所使用的格式。這種方法是使用三個雙引號(或三個單引號)來開始和結(jié)束長字符串。在該字符串中,您可以使用任意多的單引號和雙引號(參見清單 4)。
清單 4. 使用三個引號的字符串
>>> passage = """
... When using the Python programming language, one must proceed
... with caution. This is because Python is so easy to use, and
... can be so much fun. Failure to follow this warning may lead
... to shouts of "WooHoo" or "Yowza".
... """
>>> print passage
When using the Python programming language, one must proceed
with caution. This is because Python is so easy to use, and
can be so much fun. Failure to follow this warning may lead
to shouts of "WooHoo" or "Yowza".
將字符串作為一個對象
如果閱讀了本系列前兩篇文章中的任何一篇文章,那么在您的腦海中會立即浮現(xiàn)出這樣一句話:在 Python 中,所有事物都是對象。到目前為止,我還沒有涉及到關(guān)于 Python 中的字符串的對象特性的問題,但是,與往常一樣,Python 中的字符串就是對象。事實(shí)上,字符串對象是 str 類的一個實(shí)例。正如您在 探索 Python,第 2 部分 中看到的,Python 解釋器包括一個內(nèi)置幫助工具(如清單 5 所示),它可以提供關(guān)于 str 類的信息。
清單 5. 獲取關(guān)于字符串的幫助信息
>>> help(str)
Help on class str in module __builtin__:
class str(basestring)
| str(object) -> string
|
| Return a nice string representation of the object.
| If the argument is a string, the return value is the same object.
|
| Method resolution order:
| str
| basestring
| object
|
| Methods defined here:
|
| __add__(...)
| x.__add__(y) <==> x+y
|
...
使用單引號、雙引號和三引號語法創(chuàng)建的字符串仍然是字符串對象。但是您也可以使用 str 類構(gòu)造函數(shù)顯式地創(chuàng)建字符串對象,如清單 6 所示。該構(gòu)造函數(shù)可以接受簡單的內(nèi)置數(shù)值類型或字符數(shù)據(jù)作為參數(shù)。兩種方法都可以將輸入的內(nèi)容更改為新的字符串對象。
清單 6. 創(chuàng)建字符串
>>> str("Discover python")
'Discover python'
>>> str(12345)
'12345'
>>> str(123.45)
'123.45'
>>> "Wow," + " that " + "was awesome."
'Wow, that was awesome.'
>>> "Wow,"" that ""was Awesome"
'Wow, that was Awesome'
>>> "Wow! "*5
'Wow! Wow! Wow! Wow! Wow! '
>>> sr = str("Hello ")
>>> id(sr)
5560608
>>> sr += "World"
>>> sr
'Hello World'
>>> id(sr)
3708752
清單 6 中的例子也展示了關(guān)于 Python 字符串的幾個其他重要方面。第一,通過將其他字符串添加在一起,可以創(chuàng)建新的字符串,具體方法可以使用 + 運(yùn)算符,或者干脆使用適當(dāng)?shù)囊枌⒆址B在一起。第二,如果需要重復(fù)短字符串來創(chuàng)建長字符串,可以使用 * 運(yùn)算符,將字符串重復(fù)一定的次數(shù)。我在本文開頭說過,在 Python 中,字符串是不變的字符序列, 上例中的最后幾行說明了這一點(diǎn),我首先創(chuàng)建一個字符串,然后通過添加其他字符串對它進(jìn)行修改。從對 id 方法兩次調(diào)用的輸出中可以看出,創(chuàng)建的新字符串對象中保存的是向原字符串中添加文本的結(jié)果。
str 類包含大量的用于操作字符串的有用方法。這里不做一一介紹,您可以使用幫助解釋器獲得有關(guān)信息?,F(xiàn)在讓我們了解一下四個有用的函數(shù),并演示其他 str 類方法的工具。清單 7 演示了 upper、lower、split 和 join 方法。
清單 7. 字符串方法
>>> sr = "Discover Python!"
>>> sr.upper()
'DISCOVER PYTHON!'
>>> sr.lower()
'discover python!'
>>> sr = "This is a test!"
>>> sr.split()
['This', 'is', 'a', 'test!']
>>> sr = '0:1:2:3:4:5:6:7:8:9'
>>> sr.split(':')
['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']
>>> sr=":"
>>> tp = ('0', '1', '2', '3', '4', '5', '6', '7', '8', '9')
>>> sr.join(tp)
'0:1:2:3:4:5:6:7:8:9'
前兩個方法 upper 和 lower 很容易理解。它們只是分別將字符串都轉(zhuǎn)換成大寫字母或小寫字母。split 方法很有用,因為它可以將一個字符串分成幾個較小的字符串序列,方法是將令牌字符(或給定字符序列中的任何字符)用作斷開位置的指示器。所以,第一個 split 方法示例使用默認(rèn)的令牌將字符串“This is a test”拆分開,此令牌可以是任何空白字符(這個序列包括空格、制表符和換行符)。第二個 split 方法演示如何使用不同的令牌字符(本例中使用的是冒號)將一個字符串分成一系列字符串。最后的一個例子顯示如何使用 join 方法,該方法的作用與 split 方法相反, 可以使多個短字符串序列形成一個長字符串。在本例中,使用冒號將 tuple 包含的由單個字符構(gòu)成的字符串序列連接在一起。
將字符串用作字符的容器
在本文的開頭部分,我著重強(qiáng)調(diào)了 Python 中的字符串是不變的字符序列。本系列的第 2 部分 探索 Python,第 2 部分 介紹了 tuple,它也是一個不變的序列。tuple 通過以下方式支持訪問序列中的元素:使用索引符號,使用片段分離序列中的元素,以及使用特定的片段或?qū)⒉煌钠翁砑釉谝黄饋韯?chuàng)建新的元組。根據(jù)這一情況,您可能想知道是否可以將同一技巧應(yīng)用于 Python 字符串。如清單 8 所示,答案顯然是“可以”。
清單 8. 字符串方法
>>> sr="0123456789"
>>> sr[0]
'0'
>>> sr[1] + sr[0]
'10'
>>> sr[4:8] # Give me elements four through seven, inclusive
'4567'
>>> sr[:-1] # Give me all elements but the last one
'012345678'
>>> sr[1:12] # Slice more than you can chew, no problem
'123456789'
>>> sr[:-20] # Go before the start?
''
>>> sr[12:] # Go past the end?
''
>>> sr[0] + sr[1:5] + sr[5:9] + sr[9]
'0123456789'
>>> sr[10]
Traceback (most recent call last):
File "", line 1, in ?
IndexError: string index out of range
>>> len(sr) # Sequences have common methods, like get my length
10
數(shù)據(jù)分析咨詢請掃描二維碼
若不方便掃碼,搜微信號:CDAshujufenxi
訓(xùn)練與驗證損失驟升:機(jī)器學(xué)習(xí)訓(xùn)練中的異常診斷與解決方案 在機(jī)器學(xué)習(xí)模型訓(xùn)練過程中,“損失曲線” 是反映模型學(xué)習(xí)狀態(tài)的核心指 ...
2025-09-19解析 DataHub 與 Kafka:數(shù)據(jù)生態(tài)中兩類核心工具的差異與協(xié)同 在數(shù)字化轉(zhuǎn)型加速的今天,企業(yè)對數(shù)據(jù)的需求已從 “存儲” 轉(zhuǎn)向 “ ...
2025-09-19CDA 數(shù)據(jù)分析師:讓統(tǒng)計基本概念成為業(yè)務(wù)決策的底層邏輯 統(tǒng)計基本概念是商業(yè)數(shù)據(jù)分析的 “基礎(chǔ)語言”—— 從描述數(shù)據(jù)分布的 “均 ...
2025-09-19CDA 數(shù)據(jù)分析師:表結(jié)構(gòu)數(shù)據(jù) “獲取 - 加工 - 使用” 全流程的賦能者 表結(jié)構(gòu)數(shù)據(jù)(如數(shù)據(jù)庫表、Excel 表、CSV 文件)是企業(yè)數(shù)字 ...
2025-09-19SQL Server 中 CONVERT 函數(shù)的日期轉(zhuǎn)換:從基礎(chǔ)用法到實(shí)戰(zhàn)優(yōu)化 在 SQL Server 的數(shù)據(jù)處理中,日期格式轉(zhuǎn)換是高頻需求 —— 無論 ...
2025-09-18MySQL 大表拆分與關(guān)聯(lián)查詢效率:打破 “拆分必慢” 的認(rèn)知誤區(qū) 在 MySQL 數(shù)據(jù)庫管理中,“大表” 始終是性能優(yōu)化繞不開的話題。 ...
2025-09-18DSGE 模型中的 Et:理性預(yù)期算子的內(nèi)涵、作用與應(yīng)用解析 動態(tài)隨機(jī)一般均衡(Dynamic Stochastic General Equilibrium, DSGE)模 ...
2025-09-17Python 提取 TIF 中地名的完整指南 一、先明確:TIF 中的地名有哪兩種存在形式? 在開始提取前,需先判斷 TIF 文件的類型 —— ...
2025-09-17CDA 數(shù)據(jù)分析師:解鎖表結(jié)構(gòu)數(shù)據(jù)特征價值的專業(yè)核心 表結(jié)構(gòu)數(shù)據(jù)(以 “行 - 列” 規(guī)范存儲的結(jié)構(gòu)化數(shù)據(jù),如數(shù)據(jù)庫表、Excel 表、 ...
2025-09-17Excel 導(dǎo)入數(shù)據(jù)含缺失值?詳解 dropna 函數(shù)的功能與實(shí)戰(zhàn)應(yīng)用 在用 Python(如 pandas 庫)處理 Excel 數(shù)據(jù)時,“缺失值” 是高頻 ...
2025-09-16深入解析卡方檢驗與 t 檢驗:差異、適用場景與實(shí)踐應(yīng)用 在數(shù)據(jù)分析與統(tǒng)計學(xué)領(lǐng)域,假設(shè)檢驗是驗證研究假設(shè)、判斷數(shù)據(jù)差異是否 “ ...
2025-09-16CDA 數(shù)據(jù)分析師:掌控表格結(jié)構(gòu)數(shù)據(jù)全功能周期的專業(yè)操盤手 表格結(jié)構(gòu)數(shù)據(jù)(以 “行 - 列” 存儲的結(jié)構(gòu)化數(shù)據(jù),如 Excel 表、數(shù)據(jù) ...
2025-09-16MySQL 執(zhí)行計劃中 rows 數(shù)量的準(zhǔn)確性解析:原理、影響因素與優(yōu)化 在 MySQL SQL 調(diào)優(yōu)中,EXPLAIN執(zhí)行計劃是核心工具,而其中的row ...
2025-09-15解析 Python 中 Response 對象的 text 與 content:區(qū)別、場景與實(shí)踐指南 在 Python 進(jìn)行 HTTP 網(wǎng)絡(luò)請求開發(fā)時(如使用requests ...
2025-09-15CDA 數(shù)據(jù)分析師:激活表格結(jié)構(gòu)數(shù)據(jù)價值的核心操盤手 表格結(jié)構(gòu)數(shù)據(jù)(如 Excel 表格、數(shù)據(jù)庫表)是企業(yè)最基礎(chǔ)、最核心的數(shù)據(jù)形態(tài) ...
2025-09-15Python HTTP 請求工具對比:urllib.request 與 requests 的核心差異與選擇指南 在 Python 處理 HTTP 請求(如接口調(diào)用、數(shù)據(jù)爬取 ...
2025-09-12解決 pd.read_csv 讀取長浮點(diǎn)數(shù)據(jù)的科學(xué)計數(shù)法問題 為幫助 Python 數(shù)據(jù)從業(yè)者解決pd.read_csv讀取長浮點(diǎn)數(shù)據(jù)時的科學(xué)計數(shù)法問題 ...
2025-09-12CDA 數(shù)據(jù)分析師:業(yè)務(wù)數(shù)據(jù)分析步驟的落地者與價值優(yōu)化者 業(yè)務(wù)數(shù)據(jù)分析是企業(yè)解決日常運(yùn)營問題、提升執(zhí)行效率的核心手段,其價值 ...
2025-09-12用 SQL 驗證業(yè)務(wù)邏輯:從規(guī)則拆解到數(shù)據(jù)把關(guān)的實(shí)戰(zhàn)指南 在業(yè)務(wù)系統(tǒng)落地過程中,“業(yè)務(wù)邏輯” 是連接 “需求設(shè)計” 與 “用戶體驗 ...
2025-09-11塔吉特百貨孕婦營銷案例:數(shù)據(jù)驅(qū)動下的精準(zhǔn)零售革命與啟示 在零售行業(yè) “流量紅利見頂” 的當(dāng)下,精準(zhǔn)營銷成為企業(yè)突圍的核心方 ...
2025-09-11