一、插入排序
創(chuàng)新互聯(lián)專業(yè)為企業(yè)提供陽春網(wǎng)站建設(shè)、陽春做網(wǎng)站、陽春網(wǎng)站設(shè)計、陽春網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計與制作、陽春企業(yè)網(wǎng)站模板建站服務(wù),十載陽春做網(wǎng)站經(jīng)驗,不只是建網(wǎng)站,更提供有價值的思路和整體網(wǎng)絡(luò)服務(wù)。
介紹
插入排序的基本操作就是將一個數(shù)據(jù)插入到已經(jīng)排好序的有序數(shù)據(jù)中,從而得到一個新的、個數(shù)加一的有序數(shù)據(jù)。
算法適用于少量數(shù)據(jù)的排序,時間復(fù)雜度為O(n^2)。
插入排算法是穩(wěn)定的排序方法。
步驟
①從第一個元素開始,該元素可以認為已經(jīng)被排序
②取出下一個元素,在已經(jīng)排序的元素序列中從后向前掃描
③如果該元素(已排序)大于新元素,將該元素移到下一位置
④重復(fù)步驟3,直到找到已排序的元素小于或者等于新元素的位置
⑤將新元素插入到該位置中
⑥重復(fù)步驟2
排序演示
算法實現(xiàn)
二、冒泡排序
介紹
冒泡排序(Bubble Sort)是一種簡單的排序算法,時間復(fù)雜度為O(n^2)。
它重復(fù)地走訪過要排序的數(shù)列,一次比較兩個元素,如果他們的順序錯誤就把他們交換過來。走訪數(shù)列的工作是重復(fù)地進行直到?jīng)]有再需要交換,也就是說該數(shù)列已經(jīng)排序完成。
這個算法的名字由來是因為越小的元素會經(jīng)由交換慢慢“浮”到數(shù)列的頂端。
原理
循環(huán)遍歷列表,每次循環(huán)找出循環(huán)最大的元素排在后面;
需要使用嵌套循環(huán)實現(xiàn):外層循環(huán)控制總循環(huán)次數(shù),內(nèi)層循環(huán)負責(zé)每輪的循環(huán)比較。
步驟
①比較相鄰的元素。如果第一個比第二個大,就交換他們兩個。
②對每一對相鄰元素作同樣的工作,從開始第一對到結(jié)尾的最后一對。在這一點,最后的元素應(yīng)該會是最大的數(shù)。
③針對所有的元素重復(fù)以上的步驟,除了最后一個。
④持續(xù)每次對越來越少的元素重復(fù)上面的步驟,直到?jīng)]有任何一對數(shù)字需要比較。
算法實現(xiàn):
三、快速排序
介紹
快速排序(Quicksort)是對冒泡排序的一種改進,借用了分治的思想,由C. A. R. Hoare在1962年提出。
基本思想
快速排序的基本思想是:挖坑填數(shù) + 分治法。
首先選出一個軸值(pivot,也有叫基準(zhǔn)的),通過一趟排序?qū)⒋庞涗浄指舫瑟毩⒌膬刹糠?,其中一部分記錄的關(guān)鍵字均比另一部分的關(guān)鍵字小,則可分別對這兩部分記錄繼續(xù)進行排序,以達到整個序列有序。
實現(xiàn)步驟
①從數(shù)列中挑出一個元素,稱為 “基準(zhǔn)”(pivot);
②重新排序數(shù)列,所有元素比基準(zhǔn)值小的擺放在基準(zhǔn)前面,所有元素比基準(zhǔn)值大的擺在基準(zhǔn)的后面(相同的數(shù)可以到任一邊);
③對所有兩個小數(shù)列重復(fù)第二步,直至各區(qū)間只有一個數(shù)。
排序演示
算法實現(xiàn)
四、希爾排序
介紹
希爾排序(Shell Sort)是插入排序的一種,也是縮小增量排序,是直接插入排序算法的一種更高效的改進版本。希爾排序是非穩(wěn)定排序算法,時間復(fù)雜度為:O(1.3n)。
希爾排序是基于插入排序的以下兩點性質(zhì)而提出改進方法的:
·插入排序在對幾乎已經(jīng)排好序的數(shù)據(jù)操作時, 效率高, 即可以達到線性排序的效率;
·但插入排序一般來說是低效的, 因為插入排序每次只能將數(shù)據(jù)移動一位。
基本思想
①希爾排序是把記錄按下標(biāo)的一定量分組,對每組使用直接插入算法排序;
②隨著增量逐漸減少,每組包1含的關(guān)鍵詞越來越多,當(dāng)增量減至1時,整個文件恰被分成一組,算法被終止。
排序演示
算法實現(xiàn)
五、選擇排序
介紹
選擇排序(Selection sort)是一種簡單直觀的排序算法,時間復(fù)雜度為Ο(n2)。
基本思想
選擇排序的基本思想:比較 + 交換。
第一趟,在待排序記錄r1 ~ r[n]中選出最小的記錄,將它與r1交換;
第二趟,在待排序記錄r2 ~ r[n]中選出最小的記錄,將它與r2交換;
以此類推,第 i 趟,在待排序記錄ri ~ r[n]中選出最小的記錄,將它與r[i]交換,使有序序列不斷增長直到全部排序完畢。
排序演示
選擇排序的示例動畫。紅色表示當(dāng)前最小值,黃色表示已排序序列,藍色表示當(dāng)前位置。
算法實現(xiàn)
六、堆排序
介紹
堆排序(Heapsort)是指利用堆積樹(堆)這種數(shù)據(jù)結(jié)構(gòu)所設(shè)計的一種排序算法,它是選擇排序的一種。
利用數(shù)組的特點快速指定索引的元素。
基本思想
堆分為大根堆和小根堆,是完全二叉樹。
大根堆的要求是每個節(jié)點的值不大于其父節(jié)點的值,即A[PARENT[i]] =A[i]。
在數(shù)組的非降序排序中,需要使用的就是大根堆,因為根據(jù)大根堆的要求可知,最大的值一定在堆頂。
排序演示
算法實現(xiàn)
七、歸并排序
介紹
歸并排序(Merge sort)是建立在歸并操作上的一種有效的排序算法。該算法是采用分治法(Divide and Conquer)的一個非常典型的應(yīng)用。
基本思想
歸并排序算法是將兩個(或兩個以上)有序表合并成一個新的有序表,即把待排序序列分為若干個子序列,每個子序列是有序的。然后再把有序子序列合并為整體有序序列。
算法思想
自上而下遞歸法(假如序列共有n個元素)
① 將序列每相鄰兩個數(shù)字進行歸并操作,形成 floor(n/2)個序列,排序后每個序列包含兩個元素;
② 將上述序列再次歸并,形成 floor(n/4)個序列,每個序列包含四個元素;
③ 重復(fù)步驟②,直到所有元素排序完畢。
自下而上迭代法
① 申請空間,使其大小為兩個已經(jīng)排序序列之和,該空間用來存放合并后的序列;
② 設(shè)定兩個指針,最初位置分別為兩個已經(jīng)排序序列的起始位置;
③ 比較兩個指針?biāo)赶虻脑兀x擇相對小的元素放入到合并空間,并移動指針到下一位置;
④ 重復(fù)步驟③直到某一指針達到序列尾;
⑤ 將另一序列剩下的所有元素直接復(fù)制到合并序列尾。
排序演示
算法實現(xiàn)
八、基數(shù)排序
介紹
基數(shù)排序(Radix Sort)屬于“分配式排序”,又稱為“桶子法”。
基數(shù)排序法是屬于穩(wěn)定性的排序,其時間復(fù)雜度為O (nlog(r)m) ,其中 r 為采取的基數(shù),而m為堆數(shù)。
在某些時候,基數(shù)排序法的效率高于其他的穩(wěn)定性排序法。
基本思想
將所有待比較數(shù)值(正整數(shù))統(tǒng)一為同樣的數(shù)位長度,數(shù)位較短的數(shù)前面補零。然后,從最低位開始,依次進行一次排序。這樣從最低位排序一直到最高位排序完成以后,數(shù)列就變成一個有序序列。
基數(shù)排序按照優(yōu)先從高位或低位來排序有兩種實現(xiàn)方案:
MSD(Most significant digital) 從最左側(cè)高位開始進行排序。先按k1排序分組, 同一組中記錄, 關(guān)鍵碼k1相等,再對各組按k2排序分成子組, 之后, 對后面的關(guān)鍵碼繼續(xù)這樣的排序分組, 直到按最次位關(guān)鍵碼kd對各子組排序后. 再將各組連接起來,便得到一個有序序列。MSD方式適用于位數(shù)多的序列。
LSD (Least significant digital)從最右側(cè)低位開始進行排序。先從kd開始排序,再對kd-1進行排序,依次重復(fù),直到對k1排序后便得到一個有序序列。LSD方式適用于位數(shù)少的序列。
排序效果
算法實現(xiàn)
九、總結(jié)
各種排序的穩(wěn)定性、時間復(fù)雜度、空間復(fù)雜度的總結(jié):
平方階O(n2)排序:各類簡單排序:直接插入、直接選擇和冒泡排序;
從時間復(fù)雜度來說:
線性對數(shù)階O(nlog?n)排序:快速排序、堆排序和歸并排序;
O(n1+§))排序,§是介于0和1之間的常數(shù):希爾排序 ;
線性階O(n)排序:基數(shù)排序,此外還有桶、箱排序。
1、Python類型操作符和內(nèi)建函數(shù)總結(jié)
表4.5列出了所有操作符和內(nèi)建函數(shù),其中操作符順序是按優(yōu)先級從高到低排列的。同一種灰度的操作符擁有同樣的優(yōu)先級。注意在operator模塊中有這些(和絕大多數(shù)Python)操作符相應(yīng)的同功能的函數(shù)可供使用。
表4.5 標(biāo)準(zhǔn)類型操作符和內(nèi)建函數(shù)
操作符/函數(shù)
描 述
結(jié) 果a
字符串表示
``
對象的字符串表示
str
內(nèi)建函數(shù)
cmp(obj1, obj2)
比較兩個對象
int
repr(obj)
對象的字符串表示
str
str(obj)
對象的字符串表示
str
type(obj)
檢測對象的類型
type
值比較
小于
bool
大于
bool
=
小于或等于
bool
=
大于或等于
bool
==
等于
bool
!=
不等于
bool
不等于
bool
對象比較
is
是
bool
is not
不是
bool
布爾操作符
not
邏輯反
bool
and
邏輯與
bool
or
邏輯或
bool
2、Python數(shù)值類型操作符和內(nèi)建函數(shù)
一、工廠函數(shù)
數(shù)值工廠函數(shù)總結(jié)類(工廠函數(shù)) 操作
bool(obj) b 返回obj對象的布爾值,也就是 obj.__nonzero__()方法的返回值。
int(obj, base=10) 返回一個字符串或數(shù)值對象的整數(shù)表 示, 類似string.atoi();
從Python 1.6起, 引入了可選的進制參數(shù)。
long(obj, base=10) 返回一個字符或數(shù)據(jù)對象的長整數(shù)表 示,類似string.atol(),
從Python1.6起, 引入了可選的進制參數(shù) float(obj) ,
返回一個字符串或數(shù)據(jù)對象的浮點數(shù) 表示,類似string.atof()。
complex(str) or返回一個字符串的復(fù)數(shù)表示,或 者根據(jù)給定的實數(shù),
complex(real, imag=0.0) ?。耙粋€可選 的虛數(shù)部分)生成一個復(fù)數(shù)對象。
二、內(nèi)建函數(shù)
1、分類
Python 有五個運算內(nèi)建函數(shù)用于數(shù)值運算:
abs(num), coerce(num1,num2), divmod(num1,num2), pow(num1,num2,mod=1)和 round(flt,ndig=0)
其中abs()返回給定參數(shù)的絕對值。如果參數(shù)是一個復(fù)數(shù), 那么就返回math.sqrt(num.real2 + num.imag2).
coerce()是一個數(shù)據(jù)類型轉(zhuǎn)換函數(shù),不過它的行為更像一個運算符.數(shù)coerce()為程序員提供了不依賴Python 解釋器,而是自定義兩個數(shù)值類型轉(zhuǎn)換的方法。對一種新創(chuàng)建的數(shù)值類型來說, 這個特性非常有用.函數(shù)coerce()僅返回一個包含類型轉(zhuǎn)換完畢的兩個數(shù)值元素的元組.
divmod()內(nèi)建函數(shù)把除法和取余運算結(jié)合起來, 返回一個包含商和余數(shù)的元組.對整數(shù)來說,它的返回值就是地板除和取余操作的結(jié)果.對浮點數(shù)來說,返回的商部分是math.floor(num1/num2),對復(fù)數(shù)來說,商部分是ath.floor((num1/num2).real).
pow()它和雙星號 (**)運算符都可以進行指數(shù)運算.不過二者的區(qū)別并不僅僅在于一個是運算符,一個是內(nèi)建函數(shù).在Python 1.5 之前,并沒有 ** 運算符,內(nèi)建函數(shù)pow()還接受第三個可選的參數(shù),一個余數(shù)參數(shù).如果有這個參數(shù)的, pow() 先進行指數(shù)運算,然后將運算結(jié)果和第三個參數(shù)進行取余運算.這個特性主要用于密碼運算,并且比 pow(x,y) % z 性能更好, 這是因為這個函數(shù)的實現(xiàn)類似于C 函數(shù)pow(x,y,z).
round()用于對浮點數(shù)進行四舍五入運算。它有一個可選的小數(shù)位數(shù)參數(shù).如果不提供小數(shù)位參數(shù), 它返回與第一個參數(shù)最接近的整數(shù)(但仍然是浮點類型).第二個參數(shù)告訴round 函數(shù)將結(jié)果精確到小數(shù)點后指定位數(shù).
2、函數(shù)int()/round()/math.floor()它們之間的不同之處:
函數(shù) int()直接截去小數(shù)部分.(返回值為整數(shù))
函數(shù) floor() 得到最接近原數(shù)但小于原數(shù)的整數(shù).(返回值為浮點數(shù))
函數(shù) round() 得到最接近原數(shù)的整數(shù).(返回值為浮點數(shù))
3、進制轉(zhuǎn)換函數(shù):
返回字符串表示的8 進制和16 進制整數(shù),它們分別是內(nèi)建函數(shù):
oct()和 hex(). oct(255)='0377'/hex(255)='0xff'
函數(shù)chr()接受一個單字節(jié)整數(shù)值(0到255),返回一個字符串(ASCII),其值為對應(yīng)的字符.chr(97)='a'
函數(shù)ord()則相反,它接受一個字符(ASCII 或 Unicode),返回其對應(yīng)的整數(shù)值.ord('A')=65
3、Python字符串函數(shù)
(一)標(biāo)準(zhǔn)類型操作符和標(biāo)準(zhǔn)內(nèi)建函數(shù)
1)、標(biāo)準(zhǔn)類型操作符
,,=,=,==,!=,對象值得比較
注:做比較時字符串是按ASCII值的大小來比較的
is 對象身份比較
and,or,not 布爾類型
2)標(biāo)準(zhǔn)內(nèi)建函數(shù)
type(obj)
cmp(obj1,obj2)
str(obj)和repr(obj) 或反引號運算符(``) 可以方便的以字符串的方式獲取對象的
內(nèi)容、類型、數(shù)值屬性等信息。str()函數(shù)得到的字符串可讀性好, 而repr()函數(shù)得到的字符
串通??梢杂脕碇匦芦@得該對象, 通常情況下 obj == eval(repr(obj)) 這個等式是成立的
isinstance(obj,type) 判斷對象的類型
(二)序列操作
1、序列操作
字符串屬于序列對象,可以使用所有序列的操作和函數(shù)
切片 [] [:] [::]
簡單總結(jié):
*索引(S[i])獲取特定偏移的元素。
——第一個元素偏移為0
——(S[0])獲取第一個元素。
——負偏移索引意味著從最后或右邊反向進行計數(shù)
——(S[-2])獲取倒數(shù)第二個元素(就像S[len(s)-2]一樣
*分片[S[i:j]提取對應(yīng)的部分作為一個序列
——右邊界不包含在內(nèi)
——分片的邊界默認為0和序列的長度,如果沒有給出的話S[:]
——(S[1:3])獲取了從偏移為1,直到但不包括偏移為3的元素
——(S[1:])獲取從偏移為1到末尾之間的元素
——(S[:3])獲取從偏移為0直到但不包括偏移為3的元素
——(S[:-1])獲取從偏移為0直到但不包括最后一個元素之間的元素
——(S[:])獲取從偏移為0到末尾之間的元素,這有效地實現(xiàn)了頂層S拷貝
拷貝了一個相同值,但是是不同內(nèi)存區(qū)域的對象。對象字符串這樣不可變的對象不是很有用,但是對于可以實地修改的對象來說很有用。
比如列表。
擴展分片:第三個限制值 【步進】
完整形式:X[I:J:K]:這標(biāo)識索引X對象的元素,從偏移為I直到J-1,每隔K元素索引一次。第三個限制值,K,默認為1
實例
Python Code
1
2
3
4
5
S='abcdefghijk'
S[1:10]
'bcdefghij'
S[1:10:2]
'bdfhj
也可以使用負數(shù)作為步進。
分片表達式
Python Code
1
2
"hello"[::-1]
'olleh'
通過負數(shù)步進,兩個邊界的意義實際上進行了反轉(zhuǎn)。
3、成員操作符 in ,not in
返回布爾值True 或False
可以使用string模塊來判斷輸入字符的合法性,可見成品中的idcheck.py
4、字符串連接
+ 連接字符串 ‘name’+' '+'jin'
字符串格式化 '%s %s' % ('name','jin')
join()方法 ' '.join(('name','jin')) ' '.join(['name','jin'])
5、刪除清空字符串
del aString
aString=''
(三)、序列函數(shù)
序列類型函數(shù)
len(str) 返回字串的長度
enumerate(iter):接受一個可迭代對象作為參數(shù),返回一個enumerate
max(str)/min(str):max()和min()函數(shù)對其他的序列類型可能更有用,但對于string類型它們能很好地運行,返回最大或者最小的字符(按照ASCII 碼值排列),
zip([it0, it1,... itN]) 返回一個列表,其第一個元素是it0,it1,...這些元素的第一個元素組成的一個元組,第二個...,類推.
reversed(seq)c 接受一個序列作為參數(shù),返回一個以逆序訪問的迭代器(PEP 322)
sorted(iter,func=None,key=None,reverse=False) 接受一個可迭代對象作為參數(shù),返回一個有序的列表;可選參數(shù)func,key 和reverse 的含義跟list.sort()內(nèi)建函數(shù)的參數(shù)含義一樣.
注意:
sorted等需要在原處修改的函數(shù)無法用在字符串對象,但可以產(chǎn)生新的對象
sum處理的對象是數(shù)字,不能用在字符串
sorted(s)
['a', 'e', 'e', 'g', 'g', 'g', 'o']
(四)只適合于字符串類型的函數(shù)
1)raw_input()函數(shù)
內(nèi)建的raw_input()函數(shù)使用給定字符串提示用戶輸入并將這個輸入返回,下面是一個使
用raw_input()的例子:
user_input = raw_input("Enter your name: ")
prin user_input
2)str() and unicode()
str()和unicode()函數(shù)都是工廠函數(shù),就是說產(chǎn)生所對應(yīng)的類型的對象.它們接受一個任
意類型的對象,然后創(chuàng)建該對象的可打印的或者Unicode 的字符串表示. 它們和basestring 都
可以作為參數(shù)傳給isinstance()函數(shù)來判斷一個對象的類型
3)chr(), unichr(), and ord()
chr()函數(shù)用一個范圍在range(256)內(nèi)的(就是0 到255)整數(shù)做參數(shù),返回一個對應(yīng)的字符.unichr()跟它一樣,只不過返回的是Unicode 字符
ord()函數(shù)是chr()函數(shù)(對于8 位的ASCII 字符串)或unichr()函數(shù)(對于Unicode 對象)
的配對函數(shù),它以一個字符(長度為1 的字符串)作為參數(shù),返回對應(yīng)的ASCII 數(shù)值,或者Unicode
數(shù)值,如果所給的Unicode 字符超出了你的Python 定義范圍,則會引發(fā)一個TypeError 的異常
(五)、只適用于字符串的操作符
1、格式化操作符 %
字符串格式化符號
格式化字符 轉(zhuǎn)換方式
%c 轉(zhuǎn)換成字符(ASCII 碼值,或者長度為一的字符串)
%ra 優(yōu)先用repr()函數(shù)進行字符串轉(zhuǎn)換
%s 優(yōu)先用str()函數(shù)進行字符串轉(zhuǎn)換
%d / %i 轉(zhuǎn)成有符號十進制數(shù)
%ub 轉(zhuǎn)成無符號十進制數(shù)
%ob 轉(zhuǎn)成無符號八進制數(shù)
%xb/%Xb (Unsigned)轉(zhuǎn)成無符號十六進制數(shù)(x/X 代表轉(zhuǎn)換后的十六進制字符的大
小寫)
%e/%E 轉(zhuǎn)成科學(xué)計數(shù)法(e/E 控制輸出e/E)
%f/%F 轉(zhuǎn)成浮點數(shù)(小數(shù)部分自然截斷)
%g/%G %e 和%f/%E 和%F 的簡寫
%% 輸出%
格式化操作符輔助指令
符號 作用
* 定義寬度或者小數(shù)點精度
- 用做左對齊
+ 在正數(shù)前面顯示加號( + )
sp 在正數(shù)前面顯示空格
# 在八進制數(shù)前面顯示零('0'),在十六進制前面顯示'0x'或者'0X'(取決于
用的是'x'還是'X')
0 顯示的數(shù)字前面填充‘0’而不是默認的空格
% '%%'輸出一個單一的'%'
(var) 映射變量(字典參數(shù))
m.n m 是顯示的最小總寬度,n 是小數(shù)點后的位數(shù)(如果可用的話)
2、字符串模板: 更簡單的替代品
由于新式的字符串Template 對象的引進使得string 模塊又重新活了過來,Template 對象
有兩個方法,substitute()和safe_substitute().前者更為嚴(yán)謹,在key 缺少的情況下它會報一
個KeyError 的異常出來,而后者在缺少key 時,直接原封不動的把字符串顯示出
3、原始字符串操作符( r/R )
字符串抑制轉(zhuǎn)義r'帶特殊符號的字串'
myfile=open(r'C:\new\text.data','w')
4、Unicode 字符串操作符( u/U )
u'abc' U+0061 U+0062 U+0063
u'\u1234' U+1234
u'abc\u1234\n' U+0061 U+0062 U+0063 U+1234 U+0012
(六)字符串對象的方法:
1、刪減
T2.lstrip() 移除字符串前面字符(默認空格),返回字符串
T2.rstrip() 移除字符串后面字符(默認空格),返回字符串
T2.strip() 移除字符串前后面空格,返回字符串 默認空格,可以其他字符 S.strip('"')
2、切割
partition(sep),
rpartition(sep),
splitlines([keepends]),#把S按照行分割符分為一個list,keepends是一個bool值,如果為真每行后而會保留行分割符
split([sep [,maxsplit]]),#以sep為分隔符,把S分成一個list。maxsplit表示分割的次數(shù)。默認的分割符為空白字符
rsplit([sep[,maxsplit]]) #從右到左切割
備注:
partition()函數(shù)族是2.5版本新增的方法。它接受一個字符串參數(shù),并返回一個3個元素的 tuple 對象。
如果sep沒出現(xiàn)在母串中,返回值是 (sep, ‘’, ‘’);
否則,返回值的第一個元素是 sep 左端的部分,第二個元素是 sep 自身,第三個元素是 sep 右端的部分。
S.partition(';')
('', ';', ' generated by /sbin/dhclient-script\nnameserver 172.16.10.171\nnameserver 8.8.8.8\nnameserver 172.16.0.2\nnameserver 178.79.131.110\nnameserver 202.96.199.133\n')
參數(shù) maxsplit 是分切的次數(shù),即最大的分切次數(shù),所以返回值最多有 maxsplit+1 個元素。
s.split() 和 s.split(‘ ‘)的返回值不盡相同
' hello world!'.split()
['hello', 'world!']
' hello world!'.split(' ')
['', '', 'hello', '', '', 'world!']
S.split('\n',3)
['; generated by /sbin/dhclient-script', 'nameserver 172.16.10.171', 'nameserver 8.8.8.8', 'nameserver 172.16.0.2\nnameserver 178.79.131.110\nnameserver 202.96.199.133\n']
超過最大切割個數(shù)后面的全部為一個元素
按行切割
S
'; generated by /sbin/dhclient-script\nnameserver 172.16.10.171\nnameserver 8.8.8.8\nnameserver 172.16.0.2\nnameserver 178.79.131.110\nnameserver 202.96.199.133\n'
S.splitlines()
['; generated by /sbin/dhclient-script', 'nameserver 172.16.10.171', 'nameserver 8.8.8.8', 'nameserver 172.16.0.2', 'nameserver 178.79.131.110', 'nameserver 202.96.199.133']
產(chǎn)生差異的原因在于當(dāng)忽略 sep 參數(shù)或sep參數(shù)為 None 時與明確給 sep 賦予字符串值時 split() 采用兩種不同的算法。
對于前者,split() 先去除字符串兩端的空白符,然后以任意長度的空白符串作為界定符分切字符串
即連續(xù)的空白符串被當(dāng)作單一的空白符看待;
對于后者則認為兩個連續(xù)的 sep 之間存在一個空字符串。因此對于空字符串(或空白符串),它們的返回值也是不同的:
''.split()
[]
''.split(' ')
['']
3、變形
lower(),#全部小寫
upper(),#全部小寫
capitalize(),#首字母大寫
swapcase(),#大小寫交換
title()#每個單詞第一個大寫,其他小寫
備注
因為title() 函數(shù)并不去除字符串兩端的空白符也不會把連續(xù)的空白符替換為一個空格,
所以建議使用string 模塊中的capwords(s)函數(shù),它能夠去除兩端的空白符,再將連續(xù)的空白符用一個空格代替。
Python Code
1
2
3
4
' hello world!'.title()
' Hello World!'
string.capwords(' hello world!')
'Hello World!'
4、連接
join(seq)
join() 函數(shù)的高效率(相對于循環(huán)相加而言),使它成為最值得關(guān)注的字符串方法之一。
它的功用是將可迭代的字符串序列連接成一條長字符串,如:
conf = {'host':'127.0.0.1',
... 'db':'spam',
... 'user':'sa',
... 'passwd':'eggs'}
';'.join("%s=%s"%(k, v) for k, v in conf.iteritems())
'passswd=eggs;db=spam;user=sa;host=127.0.0.1'
S=''.join(T) #使用空字符串分割把字符列表轉(zhuǎn)換為字符串
5、查找
count( sub[, start[, end]]),#計算substr在S中出現(xiàn)的次數(shù)
find( sub[, start[, end]]),#返回S中出現(xiàn)sub的第一個字母的標(biāo)號,如果S中沒有sub則返回-1。start和end作用就相當(dāng)于在S[start:end]中搜索
index( substr[, start[, end]]),#與find()相同,只是在S中沒有substr時,會返回一個運行時錯誤
rfind( sub[, start[,end]]),#返回S中最后出現(xiàn)的substr的第一個字母的標(biāo)號,如果S中沒有substr則返回-1,也就是說從右邊算起的第一次出現(xiàn)的substr的首字母標(biāo)號
rindex( sub[, start[, end]])
T2.find('ie') 字符串方法調(diào)用:搜索
find()----找到的第一個符合字符的index
rfind()-----找到最后一個符合的字符的index
備注:
find()函數(shù)族找不到時返回-1,index()函數(shù)族則拋出ValueError異常。
另,也可以用 in 和 not in 操作符來判斷字符串中是否存在某個模板
6、替換
replace(old, new[,count]),#把S中的oldstar替換為newstr,count為替換次數(shù)。這是替換的通用形式,還有一些函數(shù)進行特殊字符的替換
translate(table[,deletechars]) #使用上面的函數(shù)產(chǎn)后的翻譯表,把S進行翻譯,并把deletechars中有的字符刪掉
備注:
replace()函數(shù)的 count 參數(shù)用以指定最大替換次數(shù)
translate() 的參數(shù) table 可以由 string.maketrans(frm, to) 生成
translate() 對 unicode 對象的支持并不完備,建議不要使用
7、判定
isalnum(),#是否全是字母和數(shù)字,并至少有一個字符
isalpha(),是否全是字母,并至少有一個字符
isdigit(),是否全是數(shù)字,并至少有一個字符 ,如果是全數(shù)字返回True,否則返回False
islower(),#S中的字母是否全是小寫
isupper(),#S中的字母是否是大寫
isspace(),#是否全是空白字符,并至少有一個字符
istitle(),S是否是首字母大寫的
startswith(prefix[, start[, end]]), #是否以prefix開頭
endswith(suffix[,start[, end]]),#以suffix結(jié)尾
備注:
這些函數(shù)都比較簡單,顧名知義。需要注意的是*with()函數(shù)族可以接受可選的 start, end 參數(shù),善加利用,可以優(yōu)化性能。
另,自 Py2.5 版本起,*with() 函數(shù)族的 prefix 參數(shù)可以接受 tuple 類型的實參,當(dāng)實參中的某人元素能夠匹配,即返回 True。
8、填充
字符串在輸出時的對齊:
center(width[, fillchar]), 字符串中間對齊
ljust(width[, fillchar]), 字符串左對齊,不足部分用fillchar填充,默認的為空格
rjust(width[, fillchar]), 字符串右對齊,不足部分用fillchar填充,默認的為空格
zfill(width), 把字符串變成width長,并在右對齊,不足部分用0補足
expandtabs([tabsize])把字符串中的制表符(tab)轉(zhuǎn)換為適當(dāng)數(shù)量的空格。
fillchar 參數(shù)指定了用以填充的字符,默認為空格
zfill的z為zero的縮寫,顧名思義,是以字符0進行填充,用于數(shù)值輸出
expandtabs()的tabsize 參數(shù)默認為8。它的功能是把字符串中的制表符(tab)轉(zhuǎn)換為適當(dāng)數(shù)量的空格。
9、編碼
encode([encoding[,errors]]),
decode([encoding[,errors]])
這是一對互逆操作的方法,用以編碼和解碼字符串。因為str是平臺相關(guān)的,它使用的內(nèi)碼依賴于操作系統(tǒng)環(huán)境,
而unicode是平臺無關(guān)的,是Python內(nèi)部的字符串存儲
這里的QuickSort.count叫做"函數(shù)屬性function attribute",
python等動態(tài)類型語言所具有的"函數(shù)同時是頭等對象"的功能.
即代碼可以往函數(shù)對象上靈活地添加某屬性。
def?f():???
print(f.act)
f.act=123?#定義和添加一個函數(shù)對象的屬性-函數(shù)屬性
f()?#打印123
之前的快速排序用了一個count屬性在記錄排序算法的比較次數(shù)。屬于調(diào)試顯示,不是排序的核心算法..
python常見的內(nèi)置函數(shù)有:
1. abs()函數(shù)返回數(shù)字的絕對值。
2. all() 函數(shù)用于判斷給定的參數(shù)中的所有元素是否都為 TRUE,如果是返回 True,否則返回 False。元素除了是 0、空、None、False 外都算 True;空元組、空列表返回值為True。
3. any() 函數(shù)用于判斷給定的參數(shù)是否全部為False,是則返回False,如果有一個為True,則返回True。 元素除了是 0、空、False外都算 TRUE。
4. bin()函數(shù)返回一個整數(shù)int或者長整數(shù)long int的二進制表示。
5. bool() 函數(shù)用于將給定參數(shù)轉(zhuǎn)換為布爾類型,如果參數(shù)不為空或不為0,返回True;參數(shù)為0或沒有參數(shù),返回False。
6. bytearray()方法返回一個新字節(jié)數(shù)組。這個數(shù)組里的元素是可變的,并且每個元素的值范圍: 0 = x 256(即0-255)。即bytearray()是可修改的二進制字節(jié)格式。
7. callable()函數(shù)用于檢查一個對象是否可調(diào)用的。對于函數(shù)、方法、lambda函式、類以及實現(xiàn)了 __call__ 方法的類實例, 它都返回 True。(可以加括號的都可以調(diào)用)
8. chr()函數(shù)用一個范圍在range(256)內(nèi)(即0~255)的整數(shù)作參數(shù),返回一個對應(yīng)的ASCII數(shù)值。
9. dict()函數(shù)用來將元組/列表轉(zhuǎn)換為字典格式。
10. dir()函數(shù)不帶參數(shù)時,返回當(dāng)前范圍內(nèi)的變量、方法和定義的類型列表;帶參數(shù)時,返回參數(shù)的屬性、方法列表。
擴展資料:
如何查看python3.6的內(nèi)置函數(shù)?
1、首先先打開python自帶的集成開發(fā)環(huán)境IDLE;
2、然后我們直接輸入"dir(__builtins__)",需要注意的是builtins左右的下劃線都是兩個;
3、回車之后我們就可以看到python所有的內(nèi)置函數(shù);
4、接下來我們學(xué)習(xí)第二種查看python內(nèi)置函數(shù)的方法,我們直接在IDLE中輸入"import builtins",然后輸入"dir(builtins)";
5、然后回車,同樣的這個方法也可以得到所有的python內(nèi)置的函數(shù);
6、這里我們可以使用python內(nèi)置函數(shù)len()來查看python內(nèi)置函數(shù)的個數(shù),這里我們直接輸入"len(dir(builtins))";
7、回車之后我們可以看到系統(tǒng)返回值153,說明我們現(xiàn)在這個版本中有153個內(nèi)置函數(shù);
8、最后我們介紹一個比較有用的內(nèi)置函數(shù)"help",python內(nèi)置函數(shù)有一百多個,我們當(dāng)然不能記住所有的函數(shù),這里python提供了一個"help"函數(shù),我們來看一個例子一起來體會一下help函數(shù)的用法,這里我們直接輸入"help(len)",然后回車,會看到系統(tǒng)給我們對于內(nèi)置函數(shù)"len"的解釋,當(dāng)然對于其他函數(shù)可能會有更加詳細的解釋以及用法提示。