pb 修改数据窗口种指定字段位置_第三章 Python数据类型 容器
數(shù)據(jù)類型 容器
Python中的數(shù)據(jù)包括元素和容器兩大類:
元素:
1、數(shù)字
包括整數(shù)、浮點(diǎn)數(shù)。
1.1整數(shù)
1.2浮點(diǎn)數(shù)
2、布爾類型
3、刪除數(shù)字對(duì)象引用,例如:
4、數(shù)字類型轉(zhuǎn)換
5、數(shù)學(xué)函數(shù)
6、字符串
6.1、如何在Python中使用字符串?
a、使用單引號(hào)(')
用單引號(hào)括起來表示字符串,例如:
b、使用雙引號(hào)(")
雙引號(hào)中的字符串與單引號(hào)中的字符串用法完全相同,例如:
c、使用三引號(hào)(''')
利用三引號(hào),表示多行的字符串,可以在三引號(hào)中自由的使用單引號(hào)和雙引號(hào),例如:
6.2日期和時(shí)間
獲取當(dāng)前時(shí)間,例如:
6.3、獲取格式化的時(shí)間
????可以根據(jù)需求選取各種格式,但是最簡(jiǎn)單的獲取可讀的時(shí)間模式的函數(shù)是asctime():
6.4、日期轉(zhuǎn)換為字符串
6.5、字符串轉(zhuǎn)換為日期
6.6、獲取日期差
6.7、獲取時(shí)間差
6.8、獲取上個(gè)月最后一天
6.9、字符串日期格式化為秒數(shù),返回浮點(diǎn)類型:
6.10、日期格式化為秒數(shù),返回浮點(diǎn)類型:
6.11、秒數(shù)轉(zhuǎn)字符串
6.12字符串常用內(nèi)置函數(shù)
容器:
????Python中,可包含其他對(duì)象的對(duì)象,稱之為“容器”。容器是一種數(shù)據(jù)結(jié)構(gòu)。
????常用的容器主要?jiǎng)澐譃閮煞N:序列(如:列表、元祖等)和映射(如:字典)。序列中,每個(gè)元素都有下標(biāo),它們是有序的。映射中,每個(gè)元素都有名稱(又稱“ 鍵 ”),它們是無序的。????除了序列和映射之外,還有一種需要注意的容器——“ 集合 ”。
1、通用的序列操作
有 5 種操作是所有序列中通用的。
(1)、索引
所謂“索引”,就是在序列中,根據(jù)所需元素的下標(biāo),返回所需元素。
以字符串的索引為例
‘ 2 ’為第三個(gè)元素的下標(biāo)。當(dāng)然,為了節(jié)省時(shí)間,我們大可不必為了索引而引入一個(gè)變量。我們可以直接在字符串上索引。
直接在我們的目標(biāo)序列后面加個(gè)索引所需的中括號(hào)就可以了。
不僅如此,我們還可以在input函數(shù)上對(duì)用戶輸入的內(nèi)容直接索引。
(2)、切片
切片,就是在序列中切一塊。
索引就是拿我們想要的那一個(gè),切片就是切我們想要的那一塊。索引只能拿一個(gè),切片可以切一段。其實(shí)本質(zhì)上就是一種東西,切片就是索引的加強(qiáng)版。
兩個(gè)或三個(gè)索引就是切片。而且我們?cè)谏厦嫠f的情況,也適用。
特別的,若第二個(gè)索引在第一個(gè)索引之前,則輸出空序列。
????若用戶填入空索引,計(jì)算機(jī)將根據(jù)前兩個(gè)索引所處的前后位置,默認(rèn)為序列的前后端點(diǎn)。
????第三個(gè)索引有關(guān)“步長(zhǎng)”,步長(zhǎng)不能為“0”,否則程序無法向前移動(dòng)。當(dāng)步長(zhǎng)為負(fù)數(shù)時(shí),切片從后向前執(zhí)行。
(3)、序列相加
其實(shí)就是用“+”來拼接序列。例如:
只不過相加的前提是兩者必須為同一類型的序列:
(4)、乘法
其實(shí)就是用“*”來進(jìn)行乘法運(yùn)算。
(5)、成員資格
????所謂“成員資格”測(cè)試,就是指“用運(yùn)算符 in 來檢測(cè)指定元素是否包含于序列”。
例如:
如果元素包含于序列,程序返回“True”;反之,返回“False”。
2、列表
????現(xiàn)在來總結(jié)下列表相比于其他序列特殊的地方——“可修改”與“列表方法”。
開始之前應(yīng)提到函數(shù) list。
該函數(shù)對(duì)任何序列都有用。
(1)修改列表
a、給元素賦值
直接利用下標(biāo)就可以修改列表(明顯的用戶友好型)。
b、用 del 函數(shù)刪除
其實(shí) del 函數(shù)對(duì)很多東西都適用。
c、用切片替換
切片的作用的實(shí)際情況就是用一個(gè)片段替換另一個(gè)片段。
發(fā)揮點(diǎn)想象力,用空列表來操作的話,我們就可以達(dá)到和刪除一樣的效果。
以及和增加一樣的效果。
(2)、列表方法
????? 所謂方法,就是指與對(duì)象(字符串,參數(shù)等)緊密聯(lián)系的函數(shù)。方法調(diào)用時(shí),方法前要加上對(duì)象名和句點(diǎn)。
a、append
append函數(shù)會(huì)將指定對(duì)象直接加到列表末尾。
注意:養(yǎng)成良好編程習(xí)慣:????? 在實(shí)際運(yùn)用中,為了不使計(jì)算機(jī)發(fā)生識(shí)別障礙,一般不提倡使用和函數(shù)名一樣的變量名。所以之前所舉的例子中,使用“ list ”命名變量實(shí)際是一個(gè)錯(cuò)誤的示范(與 list 函數(shù)同名)。
b、clear
像字面意思一樣,一鍵歸零。
實(shí)際效果可以用另一句話代替。
這樣就不用打那么多字。
c、copy
和字面意思一樣,復(fù)制。
當(dāng)然,它也是可替代的。
實(shí)際上,這函數(shù)意義不大,因?yàn)楦緵]必要這么麻煩。
直接賦值就行了。
d、count
計(jì)數(shù)的,看你出現(xiàn)了幾次。
e、extend
append 的增強(qiáng)版,可以把一段加到列表后面。
同樣可以被代替,一個(gè)簡(jiǎn)單的加號(hào)就可以完成。
切片也可以做到,但代碼可讀性相對(duì)不高。
f、index
????? 在列表中依次(下標(biāo)從小到大)查找元素,若元素存在,則返回第一次出現(xiàn)的下標(biāo)。反之,若元素不存在,則返回錯(cuò)誤。
g、insert
按你所提供的下標(biāo)插入你所提供的元素。(前為下標(biāo),,后為元素)
h、pop
????? 從列表中依據(jù)你所提供的下標(biāo)刪除對(duì)應(yīng)元素,并返回所刪除的元素。當(dāng)pop函數(shù)括號(hào)中不含下標(biāo)時(shí),默認(rèn)為列表最后一個(gè)元素。
若括號(hào)中含有下標(biāo),則按括號(hào)中來進(jìn)行。刪除后的列表將不含刪除值。
注:????? pop函數(shù)是唯一一個(gè)既修改了列表又返回了函數(shù)值的函數(shù)。(注意“修改了”的前提,copy函數(shù)便沒有修改,也含有返回值。)
如圖:????? list1在接受了函數(shù)append的返回值后,直接變成了None,這是因?yàn)閍ppend函數(shù)直接返回了None。你可能會(huì)發(fā)現(xiàn)這里我用了print函數(shù),而沒有像之前一樣用語句直接返回。這是因?yàn)閷?duì)空的list1,只有用print才有返回值,用語句直接輸入無返回值。
而pop函數(shù)有返回值。
????? push 和 pop是大家普遍接受的兩種“?!辈僮?。Python不提供 push ,所以我們用 append 來代替。
i、remove
remove會(huì)刪除列表中含有的第一個(gè)用戶指定的元素。
j、reverse
將列表倒過來。
你會(huì)發(fā)現(xiàn)這些函數(shù)全都可以用切片來實(shí)現(xiàn)。
k、sort
將列表按從小到打的順序排序,無返回值。
這里要提到一個(gè)類似的函數(shù)——sorted;
sorted 有返回值,故可以直接賦值。
sorted 函數(shù)適用于所有序列,但它永遠(yuǎn)返回一個(gè)列表。
l、高級(jí)排序
sort 函數(shù)可以接受兩個(gè)關(guān)鍵字參數(shù)——key 和 reverse。
????? key 會(huì)給每一個(gè)元素生成一個(gè)相應(yīng)的鍵,再按根據(jù)生成的鍵來進(jìn)行排序。
那么,key 是以什么為參考來設(shè)置鍵的呢?這依賴于我們給它所賦予的函數(shù)。
????? 我們知道函數(shù) len 是返回每個(gè)元素的長(zhǎng)度,而“ key = len ”,就是我們前面所提到的將函數(shù)賦予 key 。這里,len 函數(shù)將每個(gè)元素的長(zhǎng)度返回,key 參數(shù)接收了這些長(zhǎng)度值并轉(zhuǎn)化為鍵,sort 函數(shù)接受了鍵并進(jìn)行排序,最終得到我們的結(jié)果。
????? 與 key 相同的是,reverse 參數(shù)也需要賦值。但我們不能賦予其函數(shù),而只能賦予其布爾值。reverse 將根據(jù)布爾值來決定函數(shù)排序后的反向排列是否執(zhí)行。
3、元組
????? 元組也是序列,只是不能修改。語法也簡(jiǎn)單,加個(gè)逗號(hào)就可以變?cè)?。圓括號(hào)反倒無關(guān)緊要。
逗號(hào)至關(guān)重要!
有無逗號(hào)就是計(jì)算機(jī)識(shí)別是否為元組的依據(jù)。
????? 元組并不復(fù)雜,對(duì)它的操作也不多。除了不可修改外,與它打交道的方法和對(duì)列表打交道的方法沒有不同(index、count等元祖沒有的方法除外。)
比如切片在列表怎么用,對(duì)元組就怎么用。
????? 一般而言,在序列方面的需求,一個(gè)列表就足以滿足。那么我們接觸元組有什么意義嗎?
(1)、元組用作映射中的鍵。(列表不能)
(2)、有些內(nèi)置函數(shù)返回元組。(你還有什么理由?)
4、字符串
????? 前面我們已經(jīng)講過序列的基本操作方法,所以如何使用索引和切片來操作字符串應(yīng)該不是什么難點(diǎn)。和元祖相同的一點(diǎn)是,字符串不能修改,所以切片賦值和元素賦值等方法都是違法的。當(dāng)然,我們可以通過其他方法來達(dá)到與刪減同樣的效果。
(1)、設(shè)置字符串的格式
????? 設(shè)置字符串格式的內(nèi)容包含很多,這里也只是介紹其主要內(nèi)容。在接下來的小節(jié)中,我們的主要思想是利用 format 函數(shù)來替換“替換字段”。
替換字段主要由三部分構(gòu)成:字段名、轉(zhuǎn)換標(biāo)志、格式說明符。接下來我們會(huì)詳細(xì)說明相關(guān)內(nèi)容。
a、替換字段名
????? 字段名,就是指相應(yīng)字段的名號(hào)(索引和標(biāo)識(shí)符)。利用 format 函數(shù)來替換相應(yīng)字段的字段名,就是我們這一小節(jié)的主要目的。
在此之前,我們先來了解一下 format 函數(shù)的功能。
format 函數(shù)會(huì)用括號(hào)里的內(nèi)容替換字符串內(nèi)花括號(hào)內(nèi)的內(nèi)容。
????? 當(dāng)然,多個(gè)替換也是可以進(jìn)行的。當(dāng)我們不設(shè)置指定順序時(shí),計(jì)算機(jī)會(huì)按默認(rèn)位置進(jìn)行替換。
我們可以用數(shù)字來指定替換的位置(從0起步)。
也可以利用關(guān)鍵字參數(shù)。
當(dāng)然,用戶并非只能訪問值得本身,還可以訪問值的成分。
也可以使用句點(diǎn)表示法來訪問導(dǎo)入的模塊中的方法、屬性、變量和函數(shù)。
b、基本轉(zhuǎn)換
????? 根據(jù)我們提供的“轉(zhuǎn)換標(biāo)志”,利用 format 函數(shù)可以將目的字段轉(zhuǎn)換為我們想要的格式。
????? 當(dāng)我們用來轉(zhuǎn)換的字段為字符串時(shí),一般我們會(huì)在目的字段與轉(zhuǎn)換標(biāo)志之間夾入“!”。
????? 如圖,這里花括號(hào)內(nèi)的 python 即為目的字段,format 函數(shù)括號(hào)內(nèi)的 python 即為我們指定的字符串,而!后的“a、s、r”就是我們所提到的轉(zhuǎn)換標(biāo)志。
????? 計(jì)算機(jī)會(huì)先用 format 函數(shù)括號(hào)內(nèi)的內(nèi)容代替花括號(hào)里的內(nèi)容,再根據(jù)轉(zhuǎn)換標(biāo)志轉(zhuǎn)換替換后的數(shù)據(jù)。
????? 這里的 s、r、a、分別表示 str、repr、ascii。了解了這個(gè)信息,那么 idle 的返回值就很好理解了。
????? 此外,當(dāng)我們用來轉(zhuǎn)換的字段為數(shù)值時(shí),一般我們會(huì)在目的字段與轉(zhuǎn)換標(biāo)志之間夾入":"。
這里的 b 表示將字段轉(zhuǎn)換為二進(jìn)制。
????? 當(dāng)然,還有許多其他的轉(zhuǎn)換標(biāo)志:c(unicode)、d(十進(jìn)制)、e(科學(xué)表示法)、E(同 e ,但 E 用來表示指數(shù))、f(定點(diǎn)數(shù))……
這里便不一一指出了。
c、寬度、精度、千位分隔符
????? 某些時(shí)候,我們?cè)诜祷匾粋€(gè)值時(shí),需要調(diào)節(jié)返回值的寬度,以便對(duì)齊。所謂的調(diào)節(jié)寬度,其實(shí)就是通過在返回值的前面或后面加空格來調(diào)節(jié)返回值的位置。
這時(shí),若替換字段為數(shù)值,則默認(rèn)在返回值前面加空格;若替換字段為字符串,則默認(rèn)在返回值后面加空格。
????? 這里的 20 指的就是所加空格的數(shù)量,而空格的數(shù)量直接調(diào)節(jié)了寬度??偨Y(jié)即為:在冒號(hào)后面直接加數(shù)值來調(diào)節(jié)寬度。
設(shè)置浮點(diǎn)數(shù)時(shí),計(jì)算機(jī)一般默認(rèn)精確到小數(shù)點(diǎn)后六位。但是我們可以根據(jù)需要調(diào)節(jié)我們指定數(shù)的精度(精確度)。
????? 這里的“.”表示精度調(diào)節(jié),“3”表示精度調(diào)節(jié)到,“.3”表示精度調(diào)節(jié)到小數(shù)點(diǎn)后3位。
當(dāng)然,其他類型也可指定精度。
????? 值得注意的是,如果要調(diào)節(jié)精度與寬度,那么就不能像之前一樣用“!”分隔目的字段與指示符,而必須用“:”。
當(dāng)然,我們也可以同時(shí)使用寬度調(diào)節(jié)、精度調(diào)節(jié)、轉(zhuǎn)換標(biāo)志。
????? 要注意必要的格式,寬度調(diào)節(jié)在最前,精度調(diào)節(jié)在其后,轉(zhuǎn)換標(biāo)志在最后,特別提出,這里的 f 表示定點(diǎn)數(shù)的轉(zhuǎn)換。
另外一個(gè)值得注意的是“千位分隔符”。
????? 當(dāng)我們?cè)诿疤?hào)后面加逗號(hào)時(shí),則計(jì)算機(jī)識(shí)別我們需要使用千位分隔符。千位分隔符,顧名思義,就是每個(gè)三個(gè)數(shù)位分隔一次。
我們可以同時(shí)使用之前所提到的知識(shí)。
千位分隔符會(huì)放在寬度調(diào)節(jié)與表示精度調(diào)節(jié)的句點(diǎn)之間。
d、符號(hào)、對(duì)齊和用 0 填充
有三種方法可以使你輸出負(fù)數(shù)。
第一種,直接在 format 函數(shù)后的括號(hào)內(nèi)加負(fù)數(shù)。
第二種,運(yùn)用符號(hào)說明符。符號(hào)說明符往往放在冒號(hào)與寬度之間。特別的,如果用空格代替符號(hào)說明符,則默認(rèn)在數(shù)值前填充空格。
第三種,直接在字符串內(nèi)加符號(hào)。
????? 很多需要設(shè)置數(shù)字格式的機(jī)制(例如打印一份表格)在大多數(shù)情況下只需設(shè)置相應(yīng)的寬度與精度即可。但是在有些時(shí)候,我們需要特殊的操作才能實(shí)現(xiàn)我們的目的。例如當(dāng)對(duì)象中含有字符串與數(shù)值時(shí),由于字符串與數(shù)值的默認(rèn)對(duì)齊方式不同(字符串會(huì)在前面填充空格,數(shù)值會(huì)在后面填充空格),往往將引發(fā)一系列問題。
????? 為了解決這些問題,我們只需在特定的位置增加一些符號(hào)就行了。例如,若在冒號(hào)與寬度之間加個(gè)“0”,則表示用“0”來填充數(shù)值前的空隙。這可以很好的解決當(dāng)負(fù)數(shù)存在時(shí),數(shù)據(jù)長(zhǎng)度參差不齊的問題。
????? 若在冒號(hào)與寬度之間加入“、=”,則表示“左對(duì)齊、右對(duì)齊、居中間”,方便數(shù)據(jù)的一體化操作。
????? 當(dāng)然,我們還可以用指定字符來代替默認(rèn)的空格,只需在冒號(hào)與寬度間加入指定字符。(注意,特殊字符“$”后加了“^”)
????? 特別的一種情況,如果我們?cè)诿疤?hào)與寬度之間加入“=”,那么程序的輸出值就會(huì)將符號(hào)說明符與數(shù)值遠(yuǎn)遠(yuǎn)隔開(實(shí)質(zhì):默認(rèn)將符號(hào)放在最前面)。
????? 最后我們要提到的一個(gè)要素是“#”符號(hào),你可以將其放入符號(hào)說明符和寬度之間。(沒有符號(hào)說明符的話,就是冒號(hào)與寬度之間)根據(jù)你的數(shù)據(jù)類型不同,“#”將引發(fā)不同的數(shù)據(jù)轉(zhuǎn)化方式。下面以二進(jìn)制和十進(jìn)制為例,在不同的情況下加入“#”,所產(chǎn)生的效果也不同。前者為直接在數(shù)值前加入進(jìn)制類型的表示符,后者為精確到小數(shù)點(diǎn)后幾位。
5、字符串方法
????? 前面我們談到了列表的方法,字符串的方法比其多得多。這里我們只討論其中最有用的方法。當(dāng)然,筆者以后可能會(huì)在這篇文章的基礎(chǔ)上,繼續(xù)補(bǔ)充更多的字符串方法,所以,應(yīng)該先學(xué)好這篇文章的方法再考慮更多的事情。
字符串方法大多是從模塊 string 中繼承而來,在較早的 python 版本中,這些方法就是模塊 string 中的函數(shù)。如果有需要,我們至今仍可以引用這個(gè)模塊。
為什么這個(gè)模塊至今仍未淘汰?
????? 因?yàn)槟K string 包含一些字符串方法里沒有的函數(shù)與常量。
例如:
string.digits:包含數(shù)字0~9的字符串。
string.ascii_letters:包含所有ASCII字母(大寫與小寫)的字符串。
string.punctuation:包含所有ASCII標(biāo)點(diǎn)字符的字符串。
…………
????? 當(dāng)然,雖然說的是ASCII字符,但其實(shí)是未解碼的Unicode字符串。
接下來,在講述相關(guān)方法時(shí),我可能會(huì)繼續(xù)說明其他相關(guān)方法,而這些附加說明的方法不是我們今天的主要內(nèi)容,讀者可以根據(jù)需要自行選學(xué)。(會(huì)放入特定的版塊)
(1)、center
????? 運(yùn)用 center 方法,我們可以在指定字符串的兩邊填充特殊字符(默認(rèn)為空格)。
????? 括號(hào)里的數(shù)字限定了程序輸出的字符串的長(zhǎng)度。觀察下面的圖片應(yīng)該就可以明了我的意思。
????? 計(jì)算機(jī)會(huì)先獲取輸入字符串的位數(shù),與 center 方法里的數(shù)值進(jìn)行比較。如果數(shù)值大于位數(shù),那么計(jì)算機(jī)會(huì)將輸入字符串居中,多余位置進(jìn)行指定字符的填充工作。計(jì)算機(jī)會(huì)默認(rèn)將多余位置左右平均分配,但如果多出來的數(shù)是單數(shù),那么計(jì)算機(jī)會(huì)默認(rèn)把多出來的一位放在右邊(觀察上面第三個(gè)小程序就可以明了)。
如果位數(shù)大于或等于數(shù)值,那么計(jì)算機(jī)會(huì)直接返回原字符串。
類似方法擴(kuò)展(再次強(qiáng)調(diào),下面的內(nèi)容不是重點(diǎn),請(qǐng)自行選學(xué)):
string.ljust(width[,fillchar]):返回一個(gè)長(zhǎng)度為 max(len(string),width) 的字符串,其開頭為當(dāng)前字符串的副本,末尾為 fillchar 的指定字符(默認(rèn)為空格)。
string.rjust(widtn[,fillchar]):返回一個(gè)長(zhǎng)度為 max(len(string),width) 的字符串,其開頭為 fillchar 的指定字符(默認(rèn)為空格),末尾為當(dāng)前字符串的拷貝。
string.zfill(width):返回一個(gè)長(zhǎng)度為 width 的字符串,相比原字符串,符號(hào)說明符(+、-)移到了開頭,字符串的左邊已被 0 填充。
(2)、find
我們可以通過 find 方法來檢驗(yàn)字符串中是否含有某一子串。若子串存在,則 find 方法會(huì)返回該子串第一次出現(xiàn)的位置上的第一個(gè)字符的位置,若沒有找到,則返回-1。
這就類似于我們之前提到的列表方法 index。
????? 之前講 index 時(shí)沒有提到某個(gè)細(xì)節(jié),在這里和 find 一起提出來。find 和 index 均可以指定遍歷的初始索引和終止索引。
????? 三個(gè)位置分別代表(“子串”,起始索引,終止索引)。值得注意的是,該方法便利的范圍包含起始索引位置,不包含終止索引位置。Python中常有這樣的設(shè)定。
類似方法擴(kuò)展:
string.rfind(sub[,start[,end]]):返回遍歷到的最后一個(gè)子串的最后一個(gè)字符的位置的索引,若沒有找到,則返回-1,可以指定起始索引和終止索引。
string.index(sub[,start[,end]]):返回遍歷到的第一個(gè)子串的第一個(gè)字符的位置的索引,若沒有找到,則返回 ValueError 異常,可以指定起始索引和終止索引。
string.rindex(sub[,start[,end]]):返回遍歷到的最后一個(gè)子串的最后一個(gè)字符的位置的索引,若沒有找到,則返回 ValueError 異常,可以指定起始索引和終止索引。
string.count(sub[,start[,end]]):記錄 sub 出現(xiàn)的次數(shù),可以指定起始索引和終止索引。
string.startswith(prefix[,start[,end]]):檢查字符串是否以 prefix 打頭,可以指定檢查的起始索引和終止索引。
string.endswith(suffix[,start[,end]]):檢查字符串是否以 suffix 結(jié)尾,可以指定檢查的起始索引和終止索引。
(3)、join
字如其意,可以合并序列的元素。
????? 值得注意的是:第一,用來合并的序列必須是字符串列表;第二,其實(shí)際效果是將原字符串插入字符串列表的空隙中從而形成一個(gè)新的字符串。詳情請(qǐng)見圖。
(4)、lower
lower 會(huì)將字符串內(nèi)所有的英文字母改為小寫形式。
類似方法擴(kuò)展:
string.islower():檢查字符串中所有英文字母是否都為小寫。
string.istitle():檢查字符串中位于非字母的后面的第一個(gè)字母是否為大寫,其他字母是否為小寫。
string.isupper():檢查字符串中的所有英文字母是否都為大寫。
string.translate(table):根據(jù)轉(zhuǎn)換表 table 對(duì)字符串中的所有字符都進(jìn)行轉(zhuǎn)換,并返回結(jié)果。
string.capitalize():返回字符串的副本,但第一個(gè)字母大寫。
string.casefold():返回經(jīng)過標(biāo)準(zhǔn)化后的字符串。
string.swapcase():反轉(zhuǎn)字符串中所有字母的大小寫,并返回。
string.title():將字符串中位于非字母的后面的第一個(gè)字母轉(zhuǎn)換為大寫。
string.upper():將字符串中的所有英文字母轉(zhuǎn)換為大寫。
詞首大寫問題:
????? 既然說到 tittle 方法,就不得不談?wù)勗~首大寫問題。確實(shí),title 可以將首字母轉(zhuǎn)換為大寫。但它的轉(zhuǎn)換結(jié)果卻有些不合理。
????? 你看,它將空格識(shí)別為了非字母的字符,從而導(dǎo)致每個(gè)單詞都變成了首字母大寫。另一種類似的方法是使用 string 模塊中的函數(shù) capwords。
????? 那么,可不可以改善這個(gè)問題呢?當(dāng)然可以,但是這得靠你自己改善自己的代碼,注意各種標(biāo)點(diǎn)符號(hào)可能導(dǎo)致的結(jié)果。
總而言之,靠自己。
(5)、replace
用 replace 方法將指定字符串替換為另一個(gè)字符串,并改變結(jié)果。
用不了多久,你就會(huì)明白這方法很有用。
類似方法擴(kuò)展:
string.expandtabs([tabsize]):返回將字符串中的制表符展開為空格后的結(jié)果,可指定可選參數(shù) tabsize( 默認(rèn)為8 ) 。
(6)、split
split 恰好是 join 的反面,依據(jù)目標(biāo)字段分割指定字段。
????? 如果你沒有指定分隔符的話,程序就會(huì)默認(rèn)在單個(gè)或多個(gè)連續(xù)的空白字符(空格、制表符、換行符等)處進(jìn)行拆分。
類似方法擴(kuò)展:
string.partition(sep):在字符串中搜索 sep,并會(huì)以括號(hào)中的方式返回元祖。(sep 前的字段,sep,sep 后的字段)
string.rpartition(sep):功能與上一個(gè)相同,但返回的元祖前后相反。
string.split([sep[,maxsplit]]):與 split 功能相同,但方向?yàn)閺暮笸啊axsplit 可以指定最大劃分?jǐn)?shù)。
string.splitlines([keepends]):返回一個(gè)列表,其中包含字符串的所有行,若參數(shù) keepends 為 true,則將會(huì)包含換行符。
(7)、strip
strip 可用來刪除字符串開頭和末尾的指定字符,當(dāng)參數(shù)為 None 時(shí),則默認(rèn)為空格。
類似方法擴(kuò)展:
string.lstrip([chars]):將字符串開頭所有的 chars 都刪除,并返回結(jié)果。
string.rstrip([chars]):將字符串末尾所有的 chars 都刪除,并返回結(jié)果。
應(yīng)用舉例:
????? 假設(shè)你需要依據(jù)學(xué)校的數(shù)據(jù)庫來查找亞歷山大同學(xué)的相關(guān)數(shù)據(jù),那么你自然需要以他的名字為索引。????? 但是,你無法確定這位同學(xué)在輸入自己的名字時(shí)所輸入的大小寫情況。無法明了情況,一個(gè)個(gè)試的話就會(huì)很費(fèi)力。一個(gè)學(xué)生還可以試出來,一百個(gè)呢?
如何解決這種情況?只需利用 lower 一鍵變成小寫,再搜索 “Alexanda”即可。
同樣的,假設(shè)亞歷山大同學(xué)是為標(biāo)新立異的同學(xué),他在輸入自己的名字時(shí),加入了特殊字符來裝飾自己的名字,例如“ **$$ Alexanda . Bell $$** ”。????? 那么這時(shí)便可以使用 strip 來消除這位同學(xué)的鬼點(diǎn)子,雖然不確定特殊字符具體是哪幾個(gè),但我們可以將鍵盤上的字符全部輸入為參數(shù),就可以消除所有特殊字符。當(dāng)然,若是他引用了Unicode里的特殊字符的話,已經(jīng)可以暴打一頓了。
(8)、translate
????? translate 和 replace 一樣可以替換字符串的特定部分,雖然 translate 只可以替換單字符,但由于 translate 可以同時(shí)替換多個(gè)字符,所以效率要高于 replace 。
????? 為了使用 translate,我們要確立一個(gè)轉(zhuǎn)換表 table 。table 將引入兩個(gè)參數(shù),確立 Unicode 碼點(diǎn)間的映射關(guān)系,進(jìn)行轉(zhuǎn)換。
例如,假設(shè)我們要將一段英語文本改成帶有德國(guó)口音的版本,那么我們有必要將所有的“c”,“s”轉(zhuǎn)換成“k”,“z”。
當(dāng)然我們也可以直接查看 table,不過我們只能看到碼點(diǎn)而已。
(9)、判斷字符串是否滿足特定的條件
????? 很多以 is 開頭的字符串方法都會(huì)判斷指定的字符串是否滿足某些條件,若滿足,則執(zhí)行該方法,反之,則不執(zhí)行。
例如:string.isalnum、string.isalpha、string.isdecimal、string.isdigit、isspace……
????? 這里便不一一指出,有需要可以自行上網(wǎng)搜索。
接下來,我們開始聊聊字典。
6、字典
????? 字典直接這樣創(chuàng)造,前“鍵”后“值”,合起來稱之為“項(xiàng)”。(字典中的“鍵”必須是獨(dú)一無二的)
????? 字典是 Python 中的唯一內(nèi)置映射,和之前所提到的列表、字符串一樣,字典也擁有它的轉(zhuǎn)換函數(shù)—— dict (其實(shí)根本就不是一個(gè)函數(shù),而是一個(gè)類)。值得注意的是,下圖的轉(zhuǎn)換我們利用了元組。
也可以利用關(guān)鍵字實(shí)參來調(diào)用這個(gè)函數(shù)。
(1)、字典的基本操作
字典的基本操作與序列非常類似。
len( dict ):返回字典 dict 對(duì)應(yīng)的項(xiàng)數(shù)。
d[ k ]:返回與鍵 k 相應(yīng)的值。
d[ k ] = v:直接將值 v 關(guān)聯(lián)到鍵 k 。
del d[ k ]:刪除鍵為 k 的項(xiàng)。
k in d:檢查鍵 k 是否包含于字典 d 。
這里指出一些重要的不同之處:
a、鍵的類型:與序列的索引不同,字典的鍵不限于整數(shù),任何不可變的數(shù)據(jù)類型皆可以為鍵。
b、自動(dòng)增加:我們可以直接將字典不含有的項(xiàng)加入字典,而不需像序列一樣用取代或函數(shù)的方式,這一點(diǎn)之后會(huì)說明。
c、成員資格:a in d 是指 a 是否存在于字典 d 的鍵中,而不是值中。而在序列中,in 用來查找相應(yīng)的值。
這里我們要詳細(xì)說明一下第二點(diǎn)。
????通過程序運(yùn)行我們可以看到,我們無法直接在列表中加入一個(gè)新的元素。但是對(duì)于字典,我們可以直接加入一個(gè)新的項(xiàng)。
????如果我要使得我對(duì)列表 list1 的操作可行,我就不得不在列表 list1 中加入51個(gè) None 。
(2)、將字符串格式設(shè)置功能用于字典
????? 之前講過利用字符串格式設(shè)置功能來設(shè)置值得格式。其實(shí),我們也可以利用利用字典,來使得格式設(shè)置更容易。但是在使用字典時(shí),我們必須使用 format_map 來指明對(duì)象。
????? 如你所見,通過 format_map 指明對(duì)象后,我們可以通過鍵來同時(shí)代入多個(gè)對(duì)象。不得不提的是,在模板系統(tǒng)中,這種設(shè)置方式很有用。
(3)、字典方法
????? 字典方法的使用并沒有列表和字符串那樣頻繁,所以可以在需要時(shí),再來學(xué)習(xí)這里。
a、clear
????? 和列表中的 clear 一樣,可以清除字典中的所有項(xiàng)。這個(gè)方法其實(shí)是很有用的,我們來看兩段代碼:
第一段:
第二段:
????? 我承認(rèn)上述代碼對(duì)初學(xué)者不太友好,這主要有關(guān) python 的數(shù)據(jù)儲(chǔ)存方式,如果你可以明了我在說什么的話,你可以很容易就從上面的代碼中明了我想表達(dá) clear 的什么用法。如果看不懂上述代碼,可以先忽略上述代碼,直接看下一個(gè)方法。
b、copy
????? 和列表方法中的 copy 一樣,copy執(zhí)行的是字典的復(fù)制。然而這種復(fù)制是一種“淺復(fù)制”。觀察下列代碼:
????? 和之前一樣,如果你明了 python 的數(shù)據(jù)存儲(chǔ)方式,就能看懂上述代碼究竟發(fā)生了什么。當(dāng)我們執(zhí)行淺復(fù)制時(shí),如果替換副本中的值,原本不會(huì)改變。但若修改副本中的值,則原本會(huì)改變。
????? 深復(fù)制則不會(huì)發(fā)生這種問題,如果要實(shí)現(xiàn)深復(fù)制的話,就必須使用模塊 copy 中的函數(shù) deepcopy 。
c.fromkeys
????? 使用該方法可以創(chuàng)建一個(gè)新字典,其中包含指定的鍵,且每個(gè)鍵對(duì)應(yīng)的值都是 None 。
????? 當(dāng)然,也可以直接對(duì) dict 調(diào)用 fromkeys 。我們之前說過 dict 并非函數(shù),而是類。熟悉了這一點(diǎn),就很好理解這一操作。
當(dāng)然,我們也可以指定我們所需要的值。
d、get
如果你試圖直接訪問字典中不存在的項(xiàng)。
如果你使用 get 來訪問項(xiàng),如果項(xiàng)不存在:
如果項(xiàng)存在:
那么他就等價(jià)于直接訪問字典的結(jié)果了。
e、items
????? items 會(huì)返回一個(gè)包含所有字典項(xiàng)的列表,其中每個(gè)元素都為鍵值對(duì)的形式,且排列順序不確定。
????? 這種類型稱之為“字典視圖”,可以用于迭代。我們可以用 len() 確認(rèn)其長(zhǎng)度,以及用 in 對(duì)其執(zhí)行成員資格檢查。
????? 字典視圖的一個(gè)特性就是:它不屬于復(fù)制,它始終是底層字典的反應(yīng),底層字典發(fā)生變化,相應(yīng)的字典視圖也會(huì)發(fā)生變化。
當(dāng)然,我們可以之間將字典視圖用 list 轉(zhuǎn)化為列表進(jìn)行復(fù)制。
f、keys
返回一個(gè)字典視圖,但只包含鍵。
g、pop
同列表中的使用一樣,效果也一樣。不過 pop 的括號(hào)中放入的是鍵。
h、popitem
類似于 pop ,由于字典屬于映射,各元素之間沒有順序關(guān)系,所以 popitem 只是隨機(jī)剔除一個(gè)項(xiàng)。如果想要 popitem 以可預(yù)測(cè)的順序彈出項(xiàng),請(qǐng)參閱模塊 collections 中的 OrderedDicts 類。
i、setdefault
類似 get ,可以獲取與指定鍵相關(guān)聯(lián)的值。當(dāng)字典不包含該項(xiàng)時(shí),則自動(dòng)加入該項(xiàng)。
j、update
使用另一個(gè)字典中的項(xiàng)來更新目標(biāo)字典。沒有的會(huì)加入,不同的會(huì)替換。
k、values
類似于 keys,返回一個(gè)有字典中的值所組成字典視圖。
????通過以上對(duì)于數(shù)據(jù)類型和容器的講解,想必大家一定受益匪淺,希望大家繼續(xù)關(guān)注以后的課程!
總結(jié)
以上是生活随笔為你收集整理的pb 修改数据窗口种指定字段位置_第三章 Python数据类型 容器的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: arm中的.a文件如何产生的_可变文件系
- 下一篇: inrange函数_Python 初学者