《統(tǒng)計(jì)分析軟件:使用R與Python》 課件 第9章 Python 語(yǔ)言基礎(chǔ)_第1頁(yè)
《統(tǒng)計(jì)分析軟件:使用R與Python》 課件 第9章 Python 語(yǔ)言基礎(chǔ)_第2頁(yè)
《統(tǒng)計(jì)分析軟件:使用R與Python》 課件 第9章 Python 語(yǔ)言基礎(chǔ)_第3頁(yè)
《統(tǒng)計(jì)分析軟件:使用R與Python》 課件 第9章 Python 語(yǔ)言基礎(chǔ)_第4頁(yè)
《統(tǒng)計(jì)分析軟件:使用R與Python》 課件 第9章 Python 語(yǔ)言基礎(chǔ)_第5頁(yè)
已閱讀5頁(yè),還剩204頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

9.1在R中調(diào)用Python9.2Python入門(mén)9.3Python數(shù)據(jù)結(jié)構(gòu)9.4Python流程控制9.5函數(shù)第9章Python語(yǔ)言基礎(chǔ)Python語(yǔ)言基礎(chǔ)Python入門(mén)關(guān)鍵字和標(biāo)識(shí)符變量與常量Python語(yǔ)句數(shù)據(jù)類型及轉(zhuǎn)換運(yùn)算符Python數(shù)據(jù)結(jié)構(gòu)通用序列操作列表元組字符串字典Python流程控制if條件語(yǔ)句while及for循環(huán)在R中調(diào)用Pythonreticulate包

Python函數(shù)參數(shù)匿名函數(shù)模塊包Python語(yǔ)言是一種解釋型、面向?qū)ο?、?dòng)態(tài)數(shù)據(jù)類型的高級(jí)程序設(shè)計(jì)語(yǔ)言Python語(yǔ)言9.1在R中運(yùn)行PythonR中的reticulate包為Python和R之間的互操作性提供了一套全面的工具。包括以下工具:

以多種方式從R調(diào)用Python,包括RMarkdown、獲取Python腳本、導(dǎo)入Python模塊以及在R會(huì)話中以交互方式使用Python。R和Python對(duì)象之間的轉(zhuǎn)換(例如,在R和Pandas數(shù)據(jù)幀之間,或在R矩陣和NumPy數(shù)組之間)。靈活綁定到不同版本的Python,包括虛擬環(huán)境和Conda環(huán)境。適合用Python進(jìn)行數(shù)據(jù)預(yù)處理的R開(kāi)發(fā)人員reticulate包py_config()函數(shù)查看正在運(yùn)行的Python版本以及其他配置細(xì)節(jié)miniconda環(huán)境library(reticulate)#安裝miniconda環(huán)境install_miniconda()#顯示miniconda安裝地址miniconda_path()#更新miniconda環(huán)境miniconda_update()#miniconda環(huán)境中安裝Python庫(kù)py_install("matplotlib")在R中運(yùn)行Pythonlibrary(reticulate)交互式:repl_python()source_python("py_code.py")Python3.10.9(C:/Users/admin/AppData/Local/Programs/Python/Python310/python.exe)Reticulate1.34.0REPL--APythoninterpreterinR.Enter'exit'or'quit'toexittheREPLandreturntoR.>>>9.2Python快速入門(mén)和R一樣,Python腳本是文本文件,可以使用文本編輯器編寫(xiě)并使用.py擴(kuò)展名保存即可。9.2.1Python版HelloWorld>>>print(“Helloworld!“)#>>>PythonShell提示符Helloworld!>>>abs(-4)#abs():內(nèi)建函數(shù),取絕對(duì)值4>>>myString=‘Helloworld!’#單引號(hào)、雙引號(hào)成對(duì)使用>>>print(myString)Helloworld!>>>myString‘Helloworld!’#顯示結(jié)果帶引號(hào)>>>_#下劃線含義:表示最后一個(gè)表達(dá)式‘Helloworld!’9.2.2關(guān)鍵字和標(biāo)識(shí)符除了True、False和None之外的所有關(guān)鍵字都是小寫(xiě)的Python中的關(guān)鍵字標(biāo)識(shí)符編寫(xiě)標(biāo)識(shí)符的規(guī)則:標(biāo)識(shí)符可以是小寫(xiě)(a到z)或大寫(xiě)(A到Z)或數(shù)字(0到9)或下劃線_的字母組合。像“myClass”、“var_1”和“print_this_to_screen”這樣的名字都是合法的例子。標(biāo)識(shí)符不能以數(shù)字開(kāi)頭。例如,“1variable”無(wú)效,但“variable1”是有效名稱。關(guān)鍵字不能用作標(biāo)識(shí)符。9.2.3變量和常量Python的變量命名規(guī)則和R語(yǔ)言大致相同。不同之處:Python允許下劃線作為開(kāi)頭,但不允許英文句點(diǎn)作為開(kāi)頭或變量名的一部分

而R則恰恰相反,不允許下劃線作為開(kāi)頭,但允許英文句點(diǎn)作為開(kāi)頭或變量名的一部分。合法的變量賦值一次分配給多個(gè)變量一次為多個(gè)變量分配相同的值變量賦值動(dòng)態(tài)數(shù)據(jù)類型一般的情況下,我們用狀態(tài)圖表示變量的狀態(tài)。左邊是變量的名稱,右邊是變量值,中間的箭頭指向值。狀態(tài)圖顯示了賦值語(yǔ)句的最終操作結(jié)果。>>>advice='boss,wewanthavealunch‘>>>money=99999999>>>spend=1.11111111如上面幾條語(yǔ)句對(duì)應(yīng)的狀態(tài)圖如下圖所示:在使用變量前,需要對(duì)其賦值,沒(méi)有值的變量是沒(méi)有意義的,編譯器也不會(huì)編譯通過(guò)。例如定義一個(gè)變量為abc,不賦任何值,輸入及結(jié)果如下:>>>abcTraceback(mostrecentcalllast):File"<pyshell#33>",line1,in<module>abcNameError:name'abc'isnotdefined同一個(gè)變量可以反復(fù)賦值,而且可以是不同類型的變量,輸入如下:>>>a=123123>>>a='ABC'>>>print(a)ABC這種變量本身類型不固定的語(yǔ)言稱之為動(dòng)態(tài)語(yǔ)言,與之對(duì)應(yīng)的是靜態(tài)語(yǔ)言。靜態(tài)語(yǔ)言在定義變量時(shí)必須指定變量類型,如果賦值的時(shí)候類型不匹配,就會(huì)報(bào)錯(cuò)。和靜態(tài)語(yǔ)言相比,動(dòng)態(tài)語(yǔ)言更靈活,就是這個(gè)原因。下劃線“_”可以出現(xiàn)在變量名中。它經(jīng)常用于連接多個(gè)詞組。比如happy_study,do_it_with_more_practice。交互模式輸入如下:>>>happy_study='stayhungrystayfoolish'>>>print(happy_study)stayhungrystayfoolish如果給變量取非法的名稱,解釋器顯示語(yǔ)法錯(cuò)誤。請(qǐng)看下面的示例:>>>2wrongtest='justfortest'SyntaxError:invalidsyntax該示例提示語(yǔ)法錯(cuò)誤,錯(cuò)誤信息為無(wú)效的語(yǔ)法,原因是它不是以字母開(kāi)頭。>>>xiaoming@me='surprised'SyntaxError:can'tassigntooperator該示例提示語(yǔ)法錯(cuò)誤,錯(cuò)誤信息為不能做指定操作,原因?yàn)樗艘粋€(gè)非法字符@。(

python3中

@

表示矩陣乘法

)>>>from='from'SyntaxError:invalidsyntaxfrom是Python的一個(gè)關(guān)鍵字。解釋器通過(guò)關(guān)鍵字來(lái)識(shí)別程序的結(jié)構(gòu),并且它們不能用來(lái)作為變量名稱。語(yǔ)句是Python解釋器可以運(yùn)行的一個(gè)代碼單元,也可以理解為可以執(zhí)行的命令。我們目前已經(jīng)使用過(guò)了兩種語(yǔ)句:print打印語(yǔ)句和賦值語(yǔ)句。賦值語(yǔ)句有兩個(gè)作用:一是建立新的變量,二是將值賦予變量。任何變量在使用時(shí),都必須賦值。否則,被視為不存在的變量。>>>advice='boss,wewanthavealunch‘>>>type(advice)<class'str'>這個(gè)語(yǔ)句中的advice的類型是字符串(str)類型的。Python語(yǔ)句、縮進(jìn)和注釋表

達(dá)

式表達(dá)式是值、變量和操作符的組合。單獨(dú)一個(gè)值也被看作一個(gè)表達(dá)式。單獨(dú)的變量也可以看作一個(gè)表達(dá)式。表達(dá)式和語(yǔ)句一般不容易區(qū)分,很多人會(huì)將兩者混在一起。那么語(yǔ)句和表達(dá)式之間有什么區(qū)別?表達(dá)式是某事,而語(yǔ)句是做某事,說(shuō)的通俗點(diǎn)就是告訴計(jì)算機(jī)做什么。比如3*3是9,而print(3*3)打印出來(lái)是9。那么區(qū)別在哪里?比如我們?cè)诮换ツJ较螺斎肴缦拢?gt;>>3*39>>>print(3*3)9在交互模式下,其結(jié)果都是一樣的。但這只是因?yàn)榻忉屍骺偸前阉斜磉_(dá)式的值打印出來(lái)而已(其內(nèi)部都使用了相同的函數(shù)對(duì)結(jié)果進(jìn)行呈現(xiàn),后面會(huì)有細(xì)致的介紹)。一般情況下,Python不會(huì)這么做,畢竟3*3這樣的表達(dá)式并不能做什么有趣的事情,而編寫(xiě)print(3*3)會(huì)有一個(gè)顯示的。語(yǔ)句和表達(dá)式之間的區(qū)別在賦值時(shí)會(huì)表現(xiàn)的更加明顯一些。因?yàn)檎Z(yǔ)句不是表達(dá)式,所以沒(méi)有值可供交互式解釋器打印出來(lái)。比如在交互模式下輸入如下:>>>a=100>>>

>>>10*10100打印的結(jié)果。賦值語(yǔ)句輸入完成后,下面立刻出現(xiàn)了新的提示輸入符。而表達(dá)式輸入完成后,下面立刻得到了結(jié)果。不過(guò)對(duì)于賦值語(yǔ)句,有些東西已經(jīng)變了,變量a現(xiàn)在綁定了一個(gè)值100。這個(gè)是語(yǔ)句特性的一般定義:它們改變了事物。比如,賦值語(yǔ)句改變了變量,print語(yǔ)句改變了屏幕顯示的內(nèi)容。賦值語(yǔ)句可能是任何計(jì)算機(jī)程序設(shè)計(jì)語(yǔ)言中最重要的語(yǔ)句類型,盡管現(xiàn)在還難以說(shuō)清它們的重要性。大多數(shù)編程語(yǔ)言(如C、C++和R)都使用大括號(hào){}來(lái)定義代碼塊。Python使用縮進(jìn)的方法來(lái)區(qū)分代碼塊。代碼塊(函數(shù)體、循環(huán)等)均以縮進(jìn)開(kāi)始,以第一個(gè)未縮進(jìn)的行結(jié)束??s進(jìn)量可以自行決定,但必須在整個(gè)塊中保持一致。代碼塊使用四個(gè)空格的縮進(jìn)當(dāng)程序變的更大更復(fù)雜時(shí),讀起來(lái)也更困難。程序的各部分之間緊密銜接,想依靠部分的代碼來(lái)了解整個(gè)程序要做的,是困難的。在現(xiàn)實(shí)中,經(jīng)常會(huì)遇到一段代碼,很難弄清楚它在做什么、為什么那么做。在程序中加入自然語(yǔ)言的筆記來(lái)解釋程序在做什么,是個(gè)不錯(cuò)的主意。這種筆記稱為注釋(comments。注釋可以單獨(dú)占一行,也可以放在語(yǔ)句行的末尾。注釋在Python中,使用#號(hào)開(kāi)始表示注釋行。多行注釋則使用連續(xù)單個(gè)單引號(hào)或者雙引號(hào)文檔字符串(docstring)文檔字符串時(shí)使用三引號(hào)思考題>>>b='''line1#bisline1line2line3'''print(b)Python3支持三種不同的數(shù)值類型:

整型(int)、浮點(diǎn)型(float)、復(fù)數(shù)(complex)。字符串布爾類型空值9.2.4Python數(shù)據(jù)類型整型整型(int),通常被稱為是整型或整數(shù),是正或負(fù)整數(shù),不帶小數(shù)點(diǎn)。例如交互模式下輸入如下:>>>5151這里使用的就是整型。整型加法如下:>>>25+2550整型減法:>>>51-501整型乘法:>>>51*2102整型除法:>>>153/513.0>>>155/513.0392156862745097此處出現(xiàn)除不盡的情況了。在整數(shù)除法中,除法(/)計(jì)算結(jié)果是浮點(diǎn)數(shù),即使是兩個(gè)整數(shù)恰好整除,結(jié)果也是浮點(diǎn)數(shù),如果只想得到整數(shù)的結(jié)果,丟棄可能的分?jǐn)?shù)部分,可以使用地板除(//),整數(shù)的地板除(//)永遠(yuǎn)是整數(shù),即使除不盡。改成如下寫(xiě)法:>>>153//513>>>155//513地板除(//)只取結(jié)果的整數(shù)部分,Python還提供一個(gè)余數(shù)運(yùn)算,可以得到兩個(gè)整數(shù)相除的余數(shù)。如下:>>>153%510>>>155%512浮點(diǎn)型浮點(diǎn)型(float),浮點(diǎn)型由整數(shù)部分與小數(shù)部分組成,浮點(diǎn)型也可以使用科學(xué)計(jì)數(shù)法表示。先看示例:>>>3.3*102336.59999999999997按預(yù)計(jì)應(yīng)該一位小數(shù),但輸出結(jié)果卻有這么多位小數(shù)。是因?yàn)檎麛?shù)和浮點(diǎn)數(shù)在計(jì)算機(jī)內(nèi)部存儲(chǔ)的方式是不同的,整數(shù)運(yùn)算永遠(yuǎn)是精確的,而浮點(diǎn)數(shù)運(yùn)算則可能會(huì)有四舍五入的誤差。如下輸入:>>>3.3*102+15.5352.09999999999997浮點(diǎn)除法:>>>153/51.03.0>>>155/51.03.0392156862745097浮點(diǎn)地板除:>>>155//51.03.0>>>155%51.02.0復(fù)數(shù)復(fù)數(shù)((complex)),復(fù)數(shù)由實(shí)數(shù)部分和虛數(shù)部分構(gòu)成,可以用a+bj,或者complex(a,b)表示,復(fù)數(shù)的實(shí)部a和虛部b都是浮點(diǎn)型。Python支持復(fù)數(shù),Python的復(fù)數(shù)我們當(dāng)前階段使用或接觸的比較少,此處就不做具體的講解,有一個(gè)概念即可,有興趣可以自行查閱相關(guān)資料。字符串字符串是以單引號(hào)'或雙引號(hào)"括起來(lái)的任意文本,如果字符串內(nèi)部既包含'又包含"可以用轉(zhuǎn)義字符來(lái)標(biāo)識(shí)轉(zhuǎn)義字符\\可以轉(zhuǎn)義很多字符,比如\\n表示換行,\\t表示制表符布爾類型在Python中,使用True、False表示布爾值(請(qǐng)注意大小寫(xiě))空值是Python里一個(gè)特殊的值,用

None

表示,一般用

None

填充表格中的缺失值空值(NoneType)9.2.5數(shù)據(jù)類型轉(zhuǎn)換有時(shí)候,我們需要對(duì)數(shù)據(jù)內(nèi)置的類型進(jìn)行轉(zhuǎn)換,數(shù)據(jù)類型的轉(zhuǎn)換,你只需要將數(shù)據(jù)類型作為函數(shù)名即可。關(guān)于數(shù)據(jù)的類型轉(zhuǎn)換,有如下幾個(gè)函數(shù)可以使用:int(x)將x轉(zhuǎn)換為一個(gè)整數(shù)。float(x)將x轉(zhuǎn)換到一個(gè)浮點(diǎn)數(shù)。complex(x)將x轉(zhuǎn)換到一個(gè)復(fù)數(shù),實(shí)數(shù)部分為x,虛數(shù)部分為0。complex(x,y)將x和y轉(zhuǎn)換到一個(gè)復(fù)數(shù),實(shí)數(shù)部分為x,虛數(shù)部分為y。x和y是數(shù)字表達(dá)式。函數(shù)str()

和bool()

分別用于將變量轉(zhuǎn)換成字符串和布爾型變量.int(x)示例:>>>int(352.1)352float(x)示例:>>>float(352.1)352.1>>>float(int(352.1))352.0這里先把352.1取整得到整數(shù)352,再用float將352轉(zhuǎn)換成浮點(diǎn)數(shù)352.0,這樣就得到我們需要的結(jié)果。某些變量無(wú)法轉(zhuǎn)換成數(shù)值型變量只有在變量值為0時(shí),bool

轉(zhuǎn)換的結(jié)果才為False:使用

type()

函數(shù)來(lái)獲取某值的類型type()函數(shù)9.2.6運(yùn)算符和操作對(duì)象運(yùn)算符和操作對(duì)象是計(jì)算機(jī)中比較常見(jiàn)的,任何的計(jì)算,都涉及到運(yùn)算符和操作對(duì)象。本節(jié)將介紹Python中的運(yùn)算符和操作對(duì)象。什么是運(yùn)算符和操作對(duì)象運(yùn)算符我知道,我們前面學(xué)習(xí)的加(+)、減(-)、乘(*)、除(/)、地板除(//)、取余(%)等都是運(yùn)算符,是一些特殊符號(hào)的集合。操作對(duì)象就是由運(yùn)算符連接起來(lái)的對(duì)象。Python支持以下8種運(yùn)算符:(1)算術(shù)運(yùn)算符。(2)比較(關(guān)系)運(yùn)算符。(3)賦值運(yùn)算符。(4)邏輯運(yùn)算符。(5)位運(yùn)算符。

(6)成員運(yùn)算符。(7)身份運(yùn)算符。(8)運(yùn)算符優(yōu)先級(jí)。算術(shù)運(yùn)算符以下變量a為10,變量b為5:運(yùn)算符描述實(shí)例+加:兩個(gè)對(duì)象相加a+b輸出結(jié)果

15-減:得到負(fù)數(shù)或是一個(gè)數(shù)減去另一個(gè)數(shù)a-b輸出結(jié)果

5*乘:兩個(gè)數(shù)相乘或是返回一個(gè)被重復(fù)若干次的字符串a(chǎn)*b輸出結(jié)果

50/除:x除以ya/b輸出結(jié)果

2%取模:返回除法的余數(shù)b%a輸出結(jié)果

0**冪:返回x的y次冪a**b為10的5次方,輸出結(jié)果

100000//取整除(地板除):返回商的整數(shù)部分9//2輸出結(jié)果4,9.0//2.0輸出結(jié)果

4.0交互模式下輸入:>>>2**32/1024/1024/10244.0>>>2**64/1024/1024/102417179869184.02**32是2的32次方,這個(gè)就是32位操作系統(tǒng)最大支持的內(nèi)存的字節(jié)數(shù),除以第一個(gè)1024是轉(zhuǎn)換為KB,1KB=1024B,除以第二個(gè)1024是轉(zhuǎn)換為MB,1MB=1024KB,除以第三個(gè)1024是轉(zhuǎn)換為GB,1GB=1024MB。這個(gè)結(jié)果也就意味著32位的操作系統(tǒng)最大只能支持4GB的內(nèi)存。現(xiàn)在大家都趨向于選擇64位的了,64位的系統(tǒng)能支持多大內(nèi)存,自己可以算一下。比較運(yùn)算符以下變量a為10,變量b為20:運(yùn)算符描述實(shí)例==等于:比較對(duì)象是否相等(a==b)返回

False。!=不等于:比較兩個(gè)對(duì)象是否不相等(a!=b)返回

True.>

大于:返回x是否大于y(a>b)返回

False。<

小于:返回x是否小于y。(a<b)返回

True。>=大于等于:返回x是否大于等于y。(a>=b)返回

False。<=小于等于:返回x是否小于等于y。(a<=b)返回

True。在一些地方,會(huì)看到用1代表True,0代表False,這種是正確也是合理的表示方式,這個(gè)大家更多會(huì)理解為開(kāi)和關(guān)的意思,就像我們物理中所學(xué)習(xí)的電流的打開(kāi)和關(guān)閉一樣。后面會(huì)有更多的地方用到用1和0代表True、False的示例。另外,在Python2中,有時(shí)可能會(huì)看到這個(gè)<>符號(hào),其和!=一樣,也表示不等于,在Python3中已去除,若以后有看到<>運(yùn)算符,那應(yīng)當(dāng)使用的是Python2。賦值運(yùn)算符以下變量a為10,變量b為20:運(yùn)算符描述實(shí)例=簡(jiǎn)單的賦值運(yùn)算符c=a+b將

a+b的運(yùn)算結(jié)果賦值為c+=加法賦值運(yùn)算符c+=a等效于

c=c+a運(yùn)算符描述實(shí)例-=減法賦值運(yùn)算符c-=a等效于

c=c–a*=乘法賦值運(yùn)算符c*=a等效于

c=c*a/=除法賦值運(yùn)算符c/=a等效于

c=c/a%=取模賦值運(yùn)算符c%=a等效于

c=c%a**=冪賦值運(yùn)算符c**=a等效于

c=c**a//=取整(地板)除賦值運(yùn)算符c//=a等效于

c=c//a位運(yùn)算符按位運(yùn)算符是把數(shù)字看作二進(jìn)制來(lái)進(jìn)行計(jì)算的。Python中的按位運(yùn)算法則如下。以下變量a為60,變量b為13:運(yùn)算符描述實(shí)例(a=60,b=13)&按位與運(yùn)算符(a&b)輸出結(jié)果

12,二進(jìn)制解釋:

00001100|按位或運(yùn)算符(a|b)輸出結(jié)果

61,二進(jìn)制解釋:

00111101^按位異或運(yùn)算符:(a^b)輸出結(jié)果

49,二進(jìn)制解釋:

00110001~按位取反運(yùn)算符:(~a)輸出結(jié)果

-61,二進(jìn)制解釋:

11000011,在一個(gè)有符號(hào)二進(jìn)制數(shù)的補(bǔ)碼形式。<<

左移動(dòng)運(yùn)算符:<<“右邊的數(shù)指定移動(dòng)的位數(shù),高位丟棄,低位補(bǔ)0。a<<2輸出結(jié)果

240,二進(jìn)制解釋:

11110000>>

右移動(dòng)運(yùn)算符:a>>2輸出結(jié)果

15,二進(jìn)制解釋:

00001111邏輯運(yùn)算符Python語(yǔ)言支持邏輯運(yùn)算符,以下變量a為10,變量b為20:運(yùn)算符邏輯表達(dá)式描述實(shí)例Andxandy布爾"與"-如果

x為

False,xandy返回

False,否則它返回

y的計(jì)算值。(aandb)返回

20。Orxory布爾“或”-如果

x是非

0,它返回

x的值,否則它返回

y的計(jì)算值。(aorb)返回

10。Notnotx布爾“非”-如果

x為T(mén)rue,返回

False。如果

x為

False,它返回

True。not(aandb)返回False成員運(yùn)算符Python還支持成員運(yùn)算符,測(cè)試實(shí)例中包含了一系列的成員,包括字符串,列表或元組。運(yùn)算符描述實(shí)例in如果在指定的序列中找到值返回

True,否則返回

False。x在y序列中,如果x在y序列中返回True。notin如果在指定的序列中沒(méi)有找到值返回

True,否則返回

False。x不在y序列中,如果x不在y序列中返回

True。a=10b=3list=[1,2,3,4]print(ainlist)print(binlist)身份運(yùn)算符身份運(yùn)算符用于比較兩個(gè)對(duì)象的存儲(chǔ)單元運(yùn)算符描述實(shí)例isis判斷兩個(gè)標(biāo)識(shí)符是不是引用自一個(gè)對(duì)象xisy,如果id(x)等于id(y),

is

返回結(jié)果1isnotisnot用于判斷兩個(gè)標(biāo)識(shí)符是不是引用自不同對(duì)象xisnoty,如果id(x)不等于id(y).isnot

返回結(jié)果1a=10b=3print(aisb)print(aisnotb)運(yùn)算符優(yōu)先級(jí)以下表格列出了從最高到最低優(yōu)先級(jí)的所有運(yùn)算符:運(yùn)算符描述**指數(shù)

(最高優(yōu)先級(jí))~+-按位翻轉(zhuǎn),一元加號(hào)和減號(hào)

(最后兩個(gè)的方法名為

+@和

-@)*/%//乘,除,取模和取整除+-加法減法>><<右移,左移運(yùn)算符&位

'AND'^|位運(yùn)算符<=<>>=比較運(yùn)算符<>==!=等于運(yùn)算符=%=/=//=-=+=*=**=賦值運(yùn)算符isisnot身份運(yùn)算符innotin成員運(yùn)算符notorand邏輯運(yùn)算符本節(jié)將引入一個(gè)新的概念:數(shù)據(jù)結(jié)構(gòu)。數(shù)據(jù)結(jié)構(gòu)是通過(guò)某種方式(例如對(duì)元素進(jìn)行編號(hào))組織在一起的數(shù)據(jù)元素的集合,這些元素可以是數(shù)字或者字符。在Python中,最基本的數(shù)據(jù)結(jié)構(gòu)是序列(sequence)。Python包含6種內(nèi)建的序列,即列表、元組、str字符串、Unicode字符串、buffer對(duì)象和xrange對(duì)象。這里重點(diǎn)討論最常用的幾種:列表、元組、字符串和字典。9.3Python數(shù)據(jù)結(jié)構(gòu)9.3.1通用序列操作在講解列表和元組之前,本節(jié)先介紹Python中序列的通用操作,這些操作在列表和元組中都會(huì)用到。Python中所有序列都可以進(jìn)行某些特定的操作,這些操作包括:索引(indexing)、分片(sliceing)、序列相加(adding)、乘法(multiplying)、成員資格、長(zhǎng)度、最小值和最大值。本節(jié)首先講解對(duì)所有序列(包括元組和列表)都通用的操作。索引序列是Python中最基本的數(shù)據(jù)結(jié)構(gòu)。序列中的每個(gè)元素都分配一個(gè)數(shù)字,代表它在序列中的位置,或索引,第一個(gè)索引是0,第二個(gè)索引是1,依此類推。序列中所有的元素都是有編號(hào)的——從0開(kāi)始遞增??梢酝ㄟ^(guò)編號(hào)分別對(duì)序列的元素進(jìn)行訪問(wèn)。通過(guò)編號(hào)來(lái)取元素:>>>greeting='Hello'#定義變量greeting,并賦值Hello>>>greeting[0]#根據(jù)編號(hào)取元素,使用格式為在中括號(hào)中輸入所取元素編號(hào)值'H'>>>greeting[1]'e'>>>greeting[2]'l'序列中的元素是從0開(kāi)始從左向右依自然順序編號(hào)的,對(duì)元素的訪問(wèn)可以通過(guò)編號(hào)訪問(wèn)。獲取元素的方式為變量后面跟上中括號(hào),中括號(hào)中輸入所取元素的編號(hào)值,這個(gè)格式需要記住。這里的所指的編號(hào)就是索引,可以通過(guò)索引獲取元素。所有序列都可以通過(guò)這種方式進(jìn)行索引。交互模式下輸入如下:>>>greeting[-1]'o'>>>greeting[-2]'l'>>>greeting[-3]'l'>>>greeting[-4]'e'Python的序列也可以從右邊開(kāi)始索引,最右邊的一個(gè)元素的索引為-1,向左開(kāi)始遞減。在Python中,從左向右索引稱為正數(shù)索引,從右向左稱為負(fù)數(shù)索引。使用負(fù)數(shù)索引時(shí),Python會(huì)從最后1個(gè)元素開(kāi)始計(jì)數(shù)。最后一個(gè)元素的位置編號(hào)是-1。最后一個(gè)元素的編號(hào)不是-0,這個(gè)跟數(shù)學(xué)中的概念一樣的,-0=0,-0和0都是指向第一個(gè)元素。Python索引方式list對(duì)象a=[0,1,2,3,4,5,6,7,8,9]Python分片(Slice)操作索引用來(lái)對(duì)單個(gè)元素進(jìn)行訪問(wèn),使用分片可以對(duì)一定范圍內(nèi)的元素進(jìn)行訪問(wèn)。一個(gè)完整的分片通過(guò)冒號(hào)相隔的兩個(gè)索引來(lái)實(shí)現(xiàn),用于分隔三個(gè)參數(shù)(start_index、end_index、step)。當(dāng)只有一個(gè)“:”時(shí),默認(rèn)第三個(gè)參數(shù)step=1;當(dāng)一個(gè)“:”也沒(méi)有時(shí),start_index=end_index,表示切取start_index指定的那個(gè)元素。

切片操作基本表達(dá)式:object[start_index:end_index:step]

分片在交互模式輸入如下:>>>number=[1,2,3,4,5,6,7,8,9,10]>>>number[1:3]#取索引為第一和第二的元素

[2,3]>>>number[-3:-1]#負(fù)數(shù)表明是從右開(kāi)始計(jì)數(shù),取得倒數(shù)第三和倒數(shù)第二的元素

[8,9]分片操作既支持正數(shù)索引,也支持負(fù)數(shù)索引,并且分片操作對(duì)于提取序列的一部分是很方便的。分片操作的實(shí)現(xiàn)需要提供兩個(gè)索引作為邊界,第一個(gè)索引的元素是包含在分片內(nèi)的,第二個(gè)則不包含在分片內(nèi)。>>>number=[1,2,3,4,5,6,7,8,9,10]>>>number[-3,-1][8,9]試試使用索引0作為最后一個(gè)元素的下一個(gè)元素,輸入如下:>>>number[-3:0][]-3代表的是倒數(shù)第三個(gè)元素,0則代表的是第一個(gè)元素,倒數(shù)第3個(gè)比第一個(gè)晚出現(xiàn),既比第一個(gè)排在更后面,所以得到的結(jié)果是空序列。>>>number[-3:][8,9,10]>>>number[0:]#從第一個(gè)元素開(kāi)始輸出,輸出全部結(jié)果[1,2,3,4,5,6,7,8,9,10]>>>number[:0]#最后一個(gè)元素為第一個(gè),輸出為空[]>>>number[:3]#取得前3個(gè)元素[1,2,3]若需要輸出整個(gè)序列,可以將兩個(gè)索引都設(shè)置為空。輸入如下:>>>number[:]#取得整個(gè)數(shù)組[1,2,3,4,5,6,7,8,9,10]進(jìn)行分片的時(shí)候,分片的開(kāi)始和結(jié)束點(diǎn)都需要指定(不管是直接還是間接),用這種方式取連續(xù)的元素是沒(méi)有問(wèn)題的,但是若要取序列中不連續(xù)的元素就會(huì)比較麻煩了或是不能操作。比如要取序列number中的所有奇數(shù),以一個(gè)序列展示出來(lái),用前面的方法就不能實(shí)現(xiàn)了。對(duì)于這種情況,Python為我們提供了另外一個(gè)參數(shù)——步長(zhǎng)(steplength),該參數(shù)通常是隱式設(shè)置的。在普通的分片中,步長(zhǎng)是1——分片操作就是按照這個(gè)步長(zhǎng)逐個(gè)遍歷序列的元素,遍歷后返回開(kāi)始和結(jié)束點(diǎn)之間的所有元素,也可以理解為默認(rèn)步長(zhǎng)是1,既沒(méi)有設(shè)置步長(zhǎng)時(shí),步長(zhǎng)隱式設(shè)置值為1。輸入如下:>>>number[0:10:1][1,2,3,4,5,6,7,8,9,10]分片包含了另外一個(gè)數(shù)字。這種方式就是步長(zhǎng)的顯式設(shè)置。這個(gè)看起來(lái)和隱式設(shè)置步長(zhǎng)沒(méi)有什么區(qū)別,得到結(jié)果和之前也是一樣的。但是若將步長(zhǎng)設(shè)置為比1大的數(shù),那結(jié)果會(huì)怎樣呢?輸入如下:>>>number[0:10:2][1,3,5,7,9]由上面輸出結(jié)果我們看到,對(duì)于number序列,設(shè)置步長(zhǎng)為2時(shí),得到的結(jié)果就是我們前面想要的奇數(shù)序列。步長(zhǎng)設(shè)置為大于1的數(shù),那會(huì)得到一個(gè)跳過(guò)某些元素的序列。例如我們上面設(shè)置的步長(zhǎng)為2,得到的序列是從開(kāi)始到結(jié)束每隔1個(gè)的元素序列。比如還可以如下進(jìn)行使用:>>>number[0:10:3][1,4,7,10]>>>number[2:6:3][3,6]>>>number[2:5:3][3]>>>number[1:5:3][2,5]對(duì)于一個(gè)正數(shù)步長(zhǎng),Python會(huì)從序列的頭部開(kāi)始向右提取元素,直到最后一個(gè)元素;而對(duì)于負(fù)數(shù)步長(zhǎng),則是從序列的尾部開(kāi)始向左提取元素,直到第一個(gè)元素。正數(shù)步長(zhǎng),必須讓開(kāi)始點(diǎn)小于結(jié)束點(diǎn);而負(fù)數(shù)步長(zhǎng),則必須讓開(kāi)始點(diǎn)大于結(jié)束點(diǎn)。序列相加通過(guò)使用加號(hào)可以進(jìn)行序列的連接操作,輸入如下:>>>[1,2,3]+[4,5,6][1,2,3,4,5,6]>>>a=[1,2]>>>b=[5,6]>>>a+b[1,2,5,6]>>>s='hello,'>>>w='world'>>>s+w'hello,world'要實(shí)現(xiàn)對(duì)應(yīng)的位置元素相加,怎么辦?數(shù)字序列可以和數(shù)字序列通過(guò)加號(hào)連接,連接后的結(jié)果還是數(shù)字序列,字符串序列也可以通過(guò)加號(hào)連接,連接后的結(jié)果還是字符串序列。那數(shù)字序列是否可以和字符序列相加呢?結(jié)果是怎樣的,是數(shù)字序列還是字符串序列?輸入如下:>>>[1,2]+'hello'Traceback(mostrecentcalllast):File"<pyshell#103>",line1,in<module>[1,2]+'hello'TypeError:canonlyconcatenatelist(not"str")tolist>>>type([1,2])#取得[1,2]的類型為list<class'list'>>>>type('hello')#取得hello的類型為字符串<class'str'>數(shù)字序列和字符串序列是不能通過(guò)加號(hào)連接的。只有類型相同的序列才能通過(guò)加號(hào)進(jìn)行序列連接操作,不同類型的序列不能通過(guò)加號(hào)進(jìn)行序列連接操作。乘法此處看到標(biāo)題后不要誤認(rèn)為是數(shù)學(xué)中定義的乘法。用一個(gè)數(shù)字x乘以一個(gè)序列會(huì)生成新的序列,在新的序列中,原來(lái)的序列將被重復(fù)x次,這個(gè)就是序列中的乘法。交互模式下輸入如下:>>>'hello'*5'hellohellohellohellohello'>>>[7]*10[7,7,7,7,7,7,7,7,7,7]序列被重復(fù)了對(duì)應(yīng)的次數(shù),而不是在數(shù)學(xué)中所理解的乘法。Python中序列的乘法有什么特殊之處呢?如果要?jiǎng)?chuàng)建一個(gè)重復(fù)的序列,我們就可以像上面的示例一樣乘以一個(gè)想要得到的序列長(zhǎng)度的數(shù)字,就可以快速得到需要的列表,這樣非常方便的??樟斜砜梢院?jiǎn)單地通過(guò)兩個(gè)中括號(hào)來(lái)表示([])——表示里面什么東西都沒(méi)有。如果要初始化一個(gè)長(zhǎng)度為x的序列,需要使每個(gè)編碼位置上都是空值,此時(shí)需要一個(gè)值來(lái)代表空值,即里面沒(méi)有任何元素,我們需要使用None。None是Python的內(nèi)建值,它的確切含義是“這里什么也沒(méi)有”。例如我們輸入如下:>>>sq=[None]*5#初始化sq為含有5個(gè)None的序列>>>sq[None,None,None,None,None]序列的乘法在做一些重復(fù)操作、空列表和None初始化上的操作還是挺方便的。成員資格in運(yùn)算符用于檢驗(yàn)?zāi)硞€(gè)條件是否為真,檢查一個(gè)值是否在序列中,并返回檢驗(yàn)結(jié)果,檢驗(yàn)結(jié)果為真返回True,結(jié)果為假則返回False。下面我們嘗試in的用法,交互模式輸入如下:>>>greeting='hello,world'>>>'w'ingreeting#檢測(cè)w是否在字符串中True>>>'a'ingreetingFalse使用in可以很好的檢測(cè)出對(duì)于的字符或數(shù)字是否在對(duì)應(yīng)的列表中。長(zhǎng)度、最小值和最大值Python為我們提供了長(zhǎng)度、最大值和最小值的內(nèi)建函數(shù),對(duì)應(yīng)的內(nèi)建函數(shù)分別為len、max和min。交互模式輸入如下:>>>numbers=[300,200,100,800,500]>>>len(numbers)5>>>max(numbers)800>>>min(numbers)100>>>max(5,3,10,7)10>>>min(7,0,3,-1)-1len函數(shù)返回序列中所包含的元素的數(shù)量,max函數(shù)和min函數(shù)則分別返回序列中最大和最小的元素。max和min函數(shù)的參數(shù)不是一個(gè)序列,而是以多個(gè)數(shù)字直接作為參數(shù)。9.3.2列

表在前面的例子中已經(jīng)用了很多次列表,通過(guò)前面的示例我們看到列表的功用是比較強(qiáng)大的。本節(jié)將討論列表不同于元組和字符串的地方:列表是可變的(mutable),即列表的內(nèi)容是可改變的。列表有很多比較好用、比較獨(dú)特的方法。更新列表我們上面講述的所有關(guān)于序列的操作,如索引、分片、相加、乘法等都適用于列表。本節(jié)將介紹一些序列中沒(méi)有而列表中有的方法,這些方法的作用都是更新列表的,這些方法為:元素賦值、元素刪除、分片賦值和列表方法。1.元素賦值通過(guò)編號(hào)來(lái)標(biāo)記某個(gè)特定位置的元素,并對(duì)該位置元素重新賦值,如a[1]=10。交互模式輸入如下:>>>a=[1,2,3,2,1]>>>a[1]=10>>>a[1,10,3,2,1]>>>a[3]=10>>>a[1,10,3,10,1]可以對(duì)一個(gè)列表中的元素賦不同類型的值。輸入如下:>>>a[2]='hello'#對(duì)編號(hào)為2的元素賦值為一個(gè)字符串>>>a[1,10,'hello',10,1]<class'list'>>>>type(a[1])#別忘了查看類型的函數(shù)的使用<class'int'>>>>type(a[2])<class'str'>和R不同:Python不能為一個(gè)不存在元素的位置賦值。IndexError:為列表一個(gè)不存在元素的位置賦值a=[1,2,3,2,1]print(a)a[5]="list"print(a)2.增加元素由元素賦值的示例中看到,不能為一個(gè)不存在的位置賦值,這么說(shuō)就是一旦初始化了一個(gè)列表,就不能再往這個(gè)列表中增加元素了,這樣若需要往列表中增加元素,就非常麻煩了,需要對(duì)整個(gè)列表中的元素都復(fù)制一遍,再添加需要增加的元素,Python中有提供對(duì)應(yīng)的方法來(lái)幫助我們做這件事情呢。看如下輸入:>>>tring=[1,2,3]>>>tring.append(4)>>>tring[1,2,3,4]可以使用append()方法來(lái)解決。append()方法是一個(gè)用于在列表末尾添加新的對(duì)象的方法。該方法的語(yǔ)法如下:list.append(obj)此語(yǔ)法中l(wèi)ist代表的是列表,obj代表的是需要添加到list列表末尾的對(duì)象。3.刪除元素上面學(xué)習(xí)了往列表中增加元素,那么是否可以往列表中刪除元素呢?看如下示例:>>>tring=['a','b','c','d','e']>>>len(tring)5>>>deltring[1]>>>print('刪除第二個(gè)元素:',tring)刪除第二個(gè)元素:['a','c','d','e']>>>len(tring)4可以使用del刪除列表中的元素。4.分片賦值分片賦值是列表的一個(gè)強(qiáng)大的特性。先看如下示例:>>>list('女排奪冠了')['女','排','奪','冠','了']>>>boil=list('女排奪冠了')>>>boil['女','排','奪','冠','了']>>>show=list('hi,boy')>>>show['h','i',',','b','o','y']>>>show[3:]=list('man')>>>show['h','i',',','m','a','n']可以通過(guò)分片賦值直接對(duì)列表做變更。嵌套列表前面介紹的都是單層的列表,列表是否可以嵌套列表呢?我們做如下嘗試:>>>field=['a','b','c']>>>field['a','b','c']>>>num=[1,2,3]>>>num[1,2,3]>>>mix=[field,num]>>>mix[['a','b','c'],[1,2,3]]>>>mix[0]['a','b','c']>>>mix[1][1,2,3]在列表中可以嵌套列表,在列表中嵌套的列表取出后還是列表。列表方法方法是一個(gè)與某些對(duì)象有緊密聯(lián)系的函數(shù),對(duì)象可能是列表、數(shù)字,也可能是字符串或者其它類型的對(duì)象。方法的調(diào)用方式我們前面有一個(gè)示例,調(diào)用語(yǔ)法如下:對(duì)象.方法(參數(shù))由上面的語(yǔ)法及前面append()方法的示例我們可知:方法的定義方式是將對(duì)象放到方法名之前,兩者之間用一個(gè)點(diǎn)號(hào)隔開(kāi),方法后面的括號(hào)中可以根據(jù)需要帶上參數(shù)。除語(yǔ)法上的一些不同,方法調(diào)用和函數(shù)調(diào)用很類似。列表中有count、index、sort等一些比較常用的方法,下面逐一進(jìn)行介紹。1.append該方法前面已經(jīng)介紹,其功能是在列表的末尾添加新的對(duì)象。使用方式為如前面講解的:list.append(obj)2.countcount()方法用于統(tǒng)計(jì)某個(gè)元素在列表中出現(xiàn)的次數(shù)。count()方法的語(yǔ)法如下:list.count(obj)此語(yǔ)法中l(wèi)ist代表的是列表,obj代表列表中統(tǒng)計(jì)的對(duì)象。該方法使用示例如下:>>>field=list('hello,world')>>>field['h','e','l','l','o',',','w','o','r','l','d']>>>print('列表field中,字母o的個(gè)數(shù):',field.count('o'))#統(tǒng)計(jì)列表中字符個(gè)數(shù)列表field中,字母o的個(gè)數(shù):2>>>print('列表field中,字母l的個(gè)數(shù):',field.count('l'))列表field中,字母l的個(gè)數(shù):33.extendextend()方法用于在列表末尾一次性追加另一個(gè)序列中的多個(gè)值(用新列表擴(kuò)展原來(lái)的列表)。extend()方法的語(yǔ)法如下:list.extend(seq)此語(yǔ)法中l(wèi)ist代表的是列表,seq代表元素列表。該方法使用示例如下:>>>a=['hello','world']>>>b=['python','is','funny']>>>a.extend(b)>>>a['hello','world','python','is','funny']append()、extend()、+、+=1.append()向列表尾部追加一個(gè)新元素,列表只占一個(gè)索引位,在原有列表上增加。2.extend()向列表尾部追加一個(gè)列表,將列表中的每個(gè)元素都追加進(jìn)來(lái),在原有列表上增加。3.+直接用+號(hào)看上去與用extend()一樣的效果,但是實(shí)際上是生成了一個(gè)新的列表存這兩個(gè)列表的和,只能用在兩個(gè)列表相加上。4.+=效果與extend()一樣,向原列表追加一個(gè)新元素,在原有列表上增加。4.indexindex()方法用于從列表中找出某個(gè)值第一個(gè)匹配項(xiàng)的索引位置。index()方法的語(yǔ)法如下:list.index(obj)此語(yǔ)法中l(wèi)ist代表的是列表,obj代表查找的對(duì)象。>>>field=['hello','world','python','is','funny']>>>print('hello的索引位置為:',field.index('hello'))hello的索引位置為:0>>>print('python的索引位置為:',field.index('python'))python的索引位置為:25.insertinsert()方法用于將指定對(duì)象插入列表的指定位置。insert()方法的語(yǔ)法:list.insert(index,obj)此語(yǔ)法中l(wèi)ist代表的是列表,index代表對(duì)象obj需要插入的索引位置,obj代表要插入列表中的對(duì)象。該方法使用示例如下:>>>num=[1,2,3]>>>print('插入之前的num:',num)

插入之前的num:[1,2,3]>>>num.insert(2,'插入位置在2之后,3之前')>>>print('插入之后的num:',num)插入之后的num:[1,2,'插入位置在2之后,3之前',3]6.poppop()方法用于移除列表中的一個(gè)元素(默認(rèn)最后一個(gè)元素),并且返回該元素的值。pop()方法的語(yǔ)法:list.pop(obj=list[-1])>>>field=['hello','world','python','is','funny']>>>field.pop()#不傳參數(shù),默認(rèn)移除最后一個(gè)元素'funny'>>>print('移除元素后的field:',field)移除元素后的field:['hello','world','python','is']>>>field.pop(3)#移除編號(hào)為3的元素'is'7.removeremove()方法用于移除列表中某個(gè)值的第一個(gè)匹配項(xiàng)。remove()方法的語(yǔ)法:list.remove(obj)該方法使用示例如下:>>>field=['女排','精神','中國(guó)','精神','學(xué)習(xí)','精神']>>>print('移除前列表field:',field)移除前列表field:['女排','精神','中國(guó)','精神','學(xué)習(xí)','精神']>>>field.remove('精神')>>>print('移除后列表field:',field)移除后列表field:['女排','中國(guó)','精神','學(xué)習(xí)','精神']8.reversereverse()方法用于反向列表中元素。reverse()方法的語(yǔ)法:list.reverse()此語(yǔ)法中l(wèi)ist代表的是列表,該方法不需要傳入?yún)?shù)。該方法使用示例如下:>>>num=[1,2,3]>>>print('列表反轉(zhuǎn)前num:',num)列表反轉(zhuǎn)前num:[1,2,3]>>>num.reverse()>>>print('列表反轉(zhuǎn)后:',num)列表反轉(zhuǎn)后:[3,2,1]9.sortsort()方法用于對(duì)原列表進(jìn)行排序,如果指定參數(shù),則使用參數(shù)指定的比較方法進(jìn)行排序。sort()方法的語(yǔ)法:list.sort(func)此語(yǔ)法中l(wèi)ist代表的是列表,func為可選參數(shù),如果指定了該參數(shù)會(huì)使用該參數(shù)的方法進(jìn)行排序。該方法使用示例如下:>>>num=[5,8,1,3,6]>>>num.sort()>>>print('num調(diào)用sort方法后:',num)num調(diào)用sort方法后:[1,3,5,6,8]高級(jí)排序sort方法有兩個(gè)可選參數(shù)——key和reverse。>>>field=['study','python','is','happy']>>>field.sort(key=len)#按字符串由段到長(zhǎng)排序>>>field>>>field.sort(key=len,reverse=True)#按字符串由長(zhǎng)到短排序,傳遞兩個(gè)參數(shù)>>>field['python','study','happy','is']['is','study','happy','python']>>>num=[5,8,1,3,6]>>>num.sort(reverse=True)#排序后逆序>>>num[8,6,5,3,1]10.clearclear()方法用于清空列表,類似于

dela[:]。clear()方法的語(yǔ)法:list.clear()此語(yǔ)法中l(wèi)ist代表的是列表,不需要傳入?yún)?shù)。該方法使用示例如下:>>>field=['study','python','is','happy']>>>field.clear()>>>print('field調(diào)用clear方法后的結(jié)果:',field)field調(diào)用clear方法后的結(jié)果:[]11.copycopy()方法用于復(fù)制列表,類似于

a[:]。copy()方法的語(yǔ)法:list.copy()此語(yǔ)法中l(wèi)ist代表的是列表,不需要傳入?yún)?shù)。該方法使用示例如下:>>>field=['study','python','is','happy']>>>copyfield=field.copy()>>>print('復(fù)制操作結(jié)果:',copyfield)復(fù)制操作結(jié)果:['study','python','is','happy']操作結(jié)果和該方法的意思一樣,是原原本本的拷貝操作。9.3.3元

組Python的元組與列表類似,不同之處在于元組的元素不能修改(是否記得我們前面多次提到的字符串,它也是不能修改的)。創(chuàng)建元組的方法很簡(jiǎn)單:如果你使用逗號(hào)分隔了一些值,那么你就自動(dòng)創(chuàng)建了元組。如下輸入:>>>1,2,3(1,2,3)>>>'hello','world'('hello','world')該操作用逗號(hào)分隔了一些值,結(jié)果輸出是元組。tuple函數(shù)tuple函數(shù)的功能和list函數(shù)基本上是一樣的:以一個(gè)序列作為參數(shù)并把它轉(zhuǎn)換為元組。如果參數(shù)是元組,那么參數(shù)就會(huì)被原樣返回。如下輸入:>>>tuple(['hello','world'])('hello','world')>>>tuple('hello')('h','e','l','l','o')>>>tuple(('hello','world'))#參數(shù)是元組('hello','world')tuple函數(shù)傳入元組參數(shù)后,得到的返回值就是傳入?yún)?shù)。元組基本操作和列表一樣,元組也有一些基本的操作。如訪問(wèn)元組、修改元組、刪除元組、索引和截取等操作。當(dāng)然,這里的修改、刪除和截取等操作和列表的操作不太一樣。1.訪問(wèn)元組元組可以使用下標(biāo)索引來(lái)訪問(wèn)元組中的值,看如下示例:>>>mix=('hello','world',2015,2016)>>>print("mix[1]is:",mix[1])mix[1]is:world>>>num=(1,2,3,4,5,6,7)>>>print("num[1:5]is:",num[1:5])num[1:5]is:(2,3,4,5)2.修改元組元組中的元素值是不允許修改的,但我們可以對(duì)元組進(jìn)行連接組合,看如下示例:>>>field=('hello','world')>>>num=(2015,2016)>>>print("合并結(jié)果為:",field+num)合并結(jié)果為:('hello','world',2015,2016)3.刪除元組元組中的元素值是不允許刪除的,但我們可以使用del語(yǔ)句來(lái)刪除整個(gè)元組,看如下示例:>>>field=('hello','world')>>>delfield>>>print('刪除后的結(jié)果:',field)Traceback(mostrecentcalllast):File"<pyshell#84>",line1,in<module>print('刪除后的結(jié)果:',field)NameError:name'field'isnotdefined以上實(shí)例元組被刪除后,輸出變量會(huì)有異常信息,輸出結(jié)果告訴我們field沒(méi)有定義,即field已經(jīng)不存在了。4.元組索引、截取因?yàn)樵M也是一個(gè)序列,所以我們可以訪問(wèn)元組中的指定位置的元素,也可以截取索引中的一段元素,看如下示例:>>>field=('hello','world','welcome')>>>field[2]'welcome'>>>field[-2]'world'>>>field[1:]('world','welcome')元組內(nèi)置函數(shù)Python元組提供了一些內(nèi)置函數(shù),如計(jì)算元素個(gè)數(shù)、返回最大值、最小值、列表轉(zhuǎn)換等函數(shù)。len(tuple),計(jì)算元組元素個(gè)數(shù)。使用方式如下:>>>tup=('hello','world','welcome')>>>len(tup)3max(tuple),返回元組中元素最大值。使用方式如下:>>>tup=('6','3','8')>>>max(tup)'8'min(tuple),返回元組中元素最小值。使用方式如下:>>>tup=('6','3','8')>>>min(tup)'3'tuple(seq),將列表轉(zhuǎn)換為元組。使用方式如下:>>>field=['hello','world','welcome']>>>tup=tuple(field)>>>tup('hello','world','welcome')列表與元組區(qū)別列表與元組的區(qū)別是元組的元素不能修改。元組一旦初始化就不能修改。不可變的元組有什么意義?因?yàn)樵M不可變,所以代碼更安全。如果可能,能用元組代替列表就盡量用元組。9.3.4字符串字符串是Python中最常用的數(shù)據(jù)類型。我們可以使用引號(hào)('或")來(lái)創(chuàng)建字符串。字符串可以使用操作符+,但其功能和數(shù)學(xué)中的不一樣,它會(huì)進(jìn)行拼接(concatenation)操作,即將前后兩個(gè)字符首尾連接起來(lái)。如:>>>string1='hello'>>>string2='world'>>>print(string1+string2)helloworld如果想讓字符串之間有空格,可以建一個(gè)空字符變量,插在相應(yīng)的字符串之間讓它們隔開(kāi),或是在字符串中加入相應(yīng)的空格。交互模式下輸入如下:>>>string1='hello'>>>string2='world'>>>space=''>>>print(string1+space+string2)helloworld或者>>>string1='hello'>>>string2='world'>>>print(string1+string2)helloworld計(jì)算機(jī)是美國(guó)人發(fā)明的,因此,最早只有127個(gè)字母被編碼到計(jì)算機(jī)里,也就是大小寫(xiě)英文字母、數(shù)字和一些符號(hào),這個(gè)編碼表被稱為ASCII編碼,比如大寫(xiě)字母A的編碼是65,小寫(xiě)字母z的編碼是122。在最新的Python3版本中,字符串是以UTF-8編碼的,也就是說(shuō),Python3的字符串支持多語(yǔ)言。Python2中默認(rèn)的編碼格式是ASCII格式,在沒(méi)修改編碼格式時(shí)無(wú)法正確打印漢字,在讀取中文時(shí)會(huì)報(bào)錯(cuò)。Python2使用中文的語(yǔ)法是在字符串前面加上前綴u。字符串基本操作字符串是Python中最常用的數(shù)據(jù)類型。我們可以使用引號(hào)('或")來(lái)創(chuàng)建字符串。創(chuàng)建字符串很簡(jiǎn)單,只要為變量分配一個(gè)值即可。請(qǐng)看下面的例子:>>>field='Hello'#創(chuàng)建字符串Hello,并賦給變量field所有標(biāo)準(zhǔn)的序列操作,如索引、分片、成員資格、求長(zhǎng)度、取最小值和最大值等操作,對(duì)字符串同樣適用,我們?cè)谇懊嬲鹿?jié)已經(jīng)講解了這些操作。但是,字符串是不可變的,字符串做不了分片賦值的,請(qǐng)看如下操作:>>>field='justdoit'>>>field[-3:]'it'>>>field[-3:]=‘now‘#或field[-3]="n"Traceback(mostrecentcalllast):File"<pyshell#113>",line1,in<module>field[-3:]='now'TypeError:'str'objectdoesnotsupportitemassignment怎么在一個(gè)打印語(yǔ)句中打印出兩行?看如下輸入:>>>print('精誠(chéng)所至\n金石為開(kāi)')精誠(chéng)所至金石為開(kāi)輸出結(jié)果得到了兩行,這里使用了轉(zhuǎn)義字符\n,它表示換行的意思。轉(zhuǎn)義字符Python中有很多轉(zhuǎn)義符:轉(zhuǎn)義字符描述轉(zhuǎn)義字符描述\(在行尾時(shí))續(xù)行符\n換行\(zhòng)\反斜杠符號(hào)\v縱向制表符\'單引號(hào)\t橫向制表符\"雙引號(hào)\r回車(chē)\a響鈴\f換頁(yè)\b退格(Backspace)\oyy八進(jìn)制數(shù),yy代表的字符,例如:\o12代表?yè)Q行\(zhòng)e轉(zhuǎn)義\xyy十六進(jìn)制數(shù),yy代表的字符,例如:\x0a代表?yè)Q行\(zhòng)000空\(chéng)other其它的字符以普通格式輸出字符串格式化我們目前為止對(duì)字符串的操作都是停留在賦值、重新賦值、索引、分片和打印等一些比較基本的操作上,其實(shí)字符串還有更多更好的操作方式,例如在實(shí)際的數(shù)據(jù)分析中,經(jīng)常使用的字符串格式化的操作也比較常見(jiàn)。字符串格式化符號(hào)字符串格式化使用字符串格式化操作符百分號(hào)%來(lái)實(shí)現(xiàn)。輸入如下:>>>print('hello,%s'%'world')hello,world>>>print('小智今年%s歲了'%10)小智今年10歲了在%的左邊放置一個(gè)待格式化的字符串,右邊則放置希望格式化的值。格式化的值可以是一個(gè)字符串或者數(shù)字。格式化字符串的%s部分稱為轉(zhuǎn)換說(shuō)明符,它標(biāo)記了需要放置轉(zhuǎn)換值的位置,更通用的術(shù)語(yǔ)稱為占位符。上面示例中s表示百分號(hào)右邊的值會(huì)被格式化為字符串,s指的是str,如果不是字符串,會(huì)使用str將其轉(zhuǎn)換為字符串。如示例中就將10轉(zhuǎn)換為字符串了。用這種方式對(duì)大多數(shù)值都有效。Python為我們提供了如下所示的格式化符號(hào):符號(hào)描述符號(hào)描述%c

格式化字符及其ASCII碼%f

格式化浮點(diǎn)數(shù)字,可指定小數(shù)點(diǎn)后的精度%s

格式化字符串%e

用科學(xué)計(jì)數(shù)法格式化浮點(diǎn)數(shù)%d

格式化整數(shù)%E

作用同%e,用科學(xué)計(jì)數(shù)法格式化浮點(diǎn)數(shù)%u

格式化無(wú)符號(hào)整型%g

%f和%e的簡(jiǎn)寫(xiě)%o

格式化無(wú)符號(hào)八進(jìn)制數(shù)%G

%f和

%E的簡(jiǎn)寫(xiě)%x

格式化無(wú)符號(hào)十六進(jìn)制數(shù)%p

用十六進(jìn)制數(shù)格式化變量的地址%X

格式化無(wú)符號(hào)十六進(jìn)制數(shù)(大寫(xiě))

字符串格式化元組格式化操作符的右操作數(shù)可以是任何東西,如元組或者映射類型。如果右操作數(shù)是元組,則其中的每一個(gè)元素都會(huì)被單獨(dú)格式化,每個(gè)值都需要一個(gè)對(duì)應(yīng)的轉(zhuǎn)換說(shuō)明符。輸入如下:>>>print

(“%s年,中國(guó)女排奪得當(dāng)年世錦賽%s,女排共獲得%d次世界冠軍"%('2019','冠軍',10))2019年,中國(guó)女排奪得當(dāng)年世錦賽冠軍,女排共獲得10次世界冠軍可以用如下的方式,對(duì)格式進(jìn)行進(jìn)一步的控制:%[(name)][flags][width].[precision]typecode(name)為key(后面?zhèn)髦档臅r(shí)候必須是一個(gè)字典)flags可以有+,-,''或0。+表示右對(duì)齊。-表示左對(duì)齊。''為一個(gè)空格,表示在正數(shù)的左側(cè)填充一個(gè)空格,從而與負(fù)數(shù)對(duì)齊。0表示使用0填充。width表示顯示寬度precision表示小數(shù)點(diǎn)后精度使用空格對(duì)齊正負(fù)數(shù)控制浮點(diǎn)數(shù)輸出控制輸出位置和寬度字符串方法前面一小節(jié)介紹了很多列表的方法,字符串的方法比列表的還要多,是因?yàn)樽址畯膕tring模塊中“繼承”了很多方法。因?yàn)樽址姆椒ū容^多,這里只介紹一些特別有用的方法findfind()方法檢測(cè)字符串中是否包含子字符串str,如果指定beg(開(kāi)始)和end(結(jié)束)范圍,則檢查是否包含在指定范圍內(nèi),如果包含子字符串返回開(kāi)始的索引值,否則返回-1。find()方法的語(yǔ)法:str.find(str,beg=0,end=len(string))此語(yǔ)法中str代表的是指定檢索的字符串,beg代表開(kāi)始索引,默認(rèn)為0,end代表結(jié)束索引,默認(rèn)為字符串的長(zhǎng)度。它返回子串所在位置的最左端索引,如果沒(méi)有找到則返回-1。示例如下:>>>field='doitnow'>>>field.find('now')6>>>field.find('python')-1joinjoin()方法用于將序列中的元素以指定的字符連接生成一個(gè)新的字符串。join()方法的語(yǔ)法:str.join(sequence)示例如下:>>>dirs='','home','data','hdfs'>>>print('路徑:','/'.join(dirs))#指定’/’連接路徑:/home/data/hdfs>>>field=['1','2','3','4','5']>>>print('連接字符串列表:','+'.join(field))連接字符串列表:1+2+3+4+5lowerlower()方法轉(zhuǎn)換字符串中所有大寫(xiě)字符為小寫(xiě)。lower()方法語(yǔ)法:str.lower()str代表的是指定檢索的字符串,該方法不需要參數(shù)。返回將字符串中所有大寫(xiě)字符轉(zhuǎn)換為小寫(xiě)后生成的字符串。示例如下:>>>field='DOITNOW'>>>print('調(diào)用lower得到字符串:',field.lower())調(diào)用lower得到字符串:doitnow>>>greeting='Hello,World'>>>print('調(diào)用lower得到字符串:',greeting.lower())調(diào)用lower得到字符串:hello,worldupperupper()方法將字符串中的小寫(xiě)字母轉(zhuǎn)為大寫(xiě)字母。upper()方法語(yǔ)法:str.upper()>>>field='doitnow'>>>print('調(diào)用upper得到字符串:',field.upper())調(diào)用upper得到字符串:DOITNOW>>>greeting='Hello,World'>>>print('調(diào)用upper得到字符串:',greeting.upper())調(diào)用upper得到字符串:HELLO,WORLDswapcaseswapcase()方法用于對(duì)字符串的大小寫(xiě)字母進(jìn)行轉(zhuǎn)換,將字符串中大寫(xiě)轉(zhuǎn)換為小寫(xiě),小寫(xiě)轉(zhuǎn)換為大寫(xiě)。swapcase()方法的語(yǔ)法:str.swapcase()此語(yǔ)法中str代表的是指定檢索的字符串,該方法不需要參數(shù)。返回大小寫(xiě)字母轉(zhuǎn)換后生成的新字符串。示例如下:>>>field='Justdoit,NOW'>>>print('原字符串:',field)原字符串:Justdoit,NOW>>>print('調(diào)用swapcase方法后得到字符串:',field.swapcase())調(diào)用swapcase方法后得到字符串:jUSTDOIT,nowreplacereplace()方法把字符串中的old(舊字符串)替換成new(新字符串),如果指定第三個(gè)參數(shù)max,則替換不超過(guò)max次。replace()方法的語(yǔ)法:str.replace(old,new[,max])此語(yǔ)法中str代表的是指定檢索的字符串,old代表將被替換的子字符串,new代表新字符串,用于替換old子字符串,max代表可選字符串,替換不超過(guò)max次。返回字符串中的old(舊字符串)替換成new(新字符串)后生成的新字符串,如果指定第三個(gè)參數(shù)max,則替換不超過(guò)max次。示例如下:>>>field='doitnow,dorightnow'>>>print('原字符串:',field)原字符串:doitnow,dorightnow>>>print('新字符串:',field.replace('do','Justdo'))新字符串:Justdoitnow,Justdorightnowsplitsplit()方法通過(guò)指定分隔符對(duì)字符串進(jìn)行切片,如果參數(shù)num有指定值,則僅分隔num個(gè)子字符串。這是一個(gè)非常重要的字符串方法,它是join的逆方法,用來(lái)將字符串分割成序列。split()方法的語(yǔ)法:str.split(st="",num=string.count(str))str代表的是指定檢索的字符串,st代表分隔符,默認(rèn)為空格,num代表分割次數(shù)。返回分割后的字符串列表。示例如下:>>>field='doitnow'>>>print('不

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論