序列是Python/ target=_blank class=infotextkey>Python中最基本的數(shù)據(jù)結(jié)構(gòu)。所謂的序列,指的是可以連續(xù)存放多個(gè)值的內(nèi)存空間,序列中的每個(gè)元素都會(huì)有一個(gè)數(shù)字,即它的位置或索引。通過這個(gè)索引就能找到序列中的元素 。
在python的序列中,包括列表,字符串,元組,集合和字典。序列支持幾個(gè)通用的操作,就是可以索引、切片、相加、相乘、檢查成員,需要注意的是,集合和字典不支持索引,切片、相加和相乘操作。
序列中的通用操作
- 通過索引獲取元素
就以列表為例,訪問列表的元素可以通過下標(biāo)(也叫索引),默認(rèn)下標(biāo)從0開始遞增,也就是從左往右遞增。當(dāng)然也可以從右向左計(jì)數(shù),這樣的話最后一個(gè)元素就是從-1開始,依次類推。這也是序列中的一個(gè)特性 。
語(yǔ)法:
seq[x] #seq可以是列表,元組,字符串
實(shí)例:
lst = ['red', 10, 12.3]
print("第一個(gè)元素:",lst[0])
print("第三個(gè)元素:",lst[-1])
結(jié)果:
#輸出:red
#輸出12.3
以下是列表中通過下標(biāo)訪問元素的示意圖。
- 通過切片獲取元素。
切片操作相當(dāng)于是在列表中訪問一定范圍的元素,通過切片操作,其實(shí)相當(dāng)于返回了一個(gè)新序列 ,這個(gè)序列是原來(lái)序列的子集。
語(yǔ)法:
seq[start:end:step]
實(shí)例:
lst5 = ['red','green','blue','black','gold','orange']
print("獲取第2-5個(gè)元素:",lst5[1:5]) #有start,end,沒有step,默認(rèn)為1
print("獲取第2,4,6個(gè)元素:",lst5[1:6:2]) #遵循左閉右開原則,不包括第7個(gè)元素
print("獲取第1,3,5個(gè)元素:",lst5[::2]) #步長(zhǎng)為2
print("獲取第3個(gè)及后面的元素:",lst5[2:])
print("將列表翻轉(zhuǎn):",lst5[::-1])
結(jié)果:
獲取第2-5個(gè)元素: ['green', 'blue', 'black', 'gold']
獲取第2,4,6個(gè)元素: ['green', 'black', 'orange']
獲取第1,3,5個(gè)元素: ['red', 'blue', 'gold']
獲取第3個(gè)及后面的元素: ['blue', 'black', 'gold', 'orange']
將列表翻轉(zhuǎn): ['orange', 'gold', 'black', 'blue', 'green', 'red']
說明:
start:表示切片的開始索引位置(包括該位置),也可以不指定,默認(rèn)為0,也就是從序列的開頭進(jìn)行切片;
end:表示切片的結(jié)束索引位置(不包括該位置),如果不指定,則默認(rèn)為列表的長(zhǎng)度,注意end不能超過列表的長(zhǎng)度,否則會(huì)報(bào)錯(cuò);
step:表示切片的步長(zhǎng),如果 step 的值大于 1,則在進(jìn)行切片操作時(shí),會(huì)“跳躍式”的取元素。如果省略設(shè)置 step 的值,step的值就為1,則最后一個(gè)冒號(hào)就可以省略。
- 序列進(jìn)行相加,相乘
序列還支持序列的相加,相乘操作,以下就以兩個(gè)兩個(gè)列表的相加操作為例。
語(yǔ)法:
seq = seq1 + seq2
實(shí)例:
a_list = ['abc']
b_list = ['xyz']
c_list = a_list + b_list
print("兩個(gè)列表相加后產(chǎn)生的新列表:",c_list)
print("列表a_list乘3后產(chǎn)生的新列表:",a_list*3)
結(jié)果:
兩個(gè)列表相加后產(chǎn)生的新列表: ['abc', 'xyz']
兩個(gè)列表相乘后產(chǎn)生的新列表: ['abc', 'abc', 'abc']
- 檢查序列中的元素
檢查序列是否存在某個(gè)元素可以in關(guān)鍵字 ,同理也可以not in檢查元素不在序列中,他們返回的結(jié)果是boolean值。
同樣以列表為例
語(yǔ)法:
元素 (not)in seq
實(shí)例
lst8 = ['red', 'yellow', 'cream', 'blue', 'gunmetal']
print("檢查列表lst8中是否包含blue元素:",'blue' in lst8)
print("檢查列表lst8中是否不包含black元素:",'blac' not in lst8)
結(jié)果:
檢查列表lst8中是否包含blue元素: True
檢查列表lst8中是否不包含black元素: True
- 序列的方法列表
序列除了以上的操作外,還支持如下的方法:
同樣以list為例:
lst=['orange', 'gold', 'black']
字符串
字符串是python中最常見的一種數(shù)據(jù)類型,幾乎只要開發(fā)程序,就離不開對(duì)字符串的處理 。字符串的定義非常簡(jiǎn)單,就是使用單引號(hào)或雙引號(hào)引起來(lái)就可以了 。
- 字符串格式化
使用%進(jìn)行字符串格式化
前面學(xué)習(xí)的字符串,一旦聲明,內(nèi)容就不會(huì)變了。雖然也可以對(duì)字符串進(jìn)行操作來(lái)改變字符串的值,但其實(shí)變?yōu)橐粋€(gè)新的字符串了。那么有這樣一種場(chǎng)景,聲明的字符串中只有一部分會(huì)隨著場(chǎng)景會(huì)發(fā)生變化 。比如說,我要定義個(gè)“you name is xxx”,那么這個(gè)xxx是根據(jù)詢問的人的不同,給出的答案肯定也不會(huì)。那么這樣的場(chǎng)景幾乎就會(huì)用到字符串格式化。
print("your name is %s" % ('zhangan'))
可以看出,%后面的元組數(shù)據(jù)就是要傳入的值,你可以傳入張三,也可以是李四。字符串的%其實(shí)就是一個(gè)占位符,就是說我并不知道這里的字符是啥 ? 但是肯定的是這里有一個(gè)字符串 。故使用一個(gè)符號(hào)站住位置 。注意:%s就是代表后面的字符是字符串 。
除了%s的符號(hào)外,python字符串格式化符號(hào)還有很多,其中最常用的有格式化整數(shù)、格式化浮點(diǎn)數(shù)。
格式化操作輔助指令
格式化操作輔助指令主要是針對(duì)數(shù)字多樣化的顯示。先來(lái)看看主要的輔助指令有:
- m.n : m是顯示的最小總寬度,n是小數(shù)點(diǎn)后的保留位數(shù)
- - : 用作左對(duì)齊
- + :在正數(shù)前面顯示加號(hào)(+)
- <sp>: 在正數(shù)前顯示空格
- 0 : 顯示的數(shù)字前面填充0而不是默認(rèn)的空格
print("保留3位數(shù)字->'%.3f'" % 659)
print("返回的數(shù)字寬度是8位,小數(shù)后兩位,默認(rèn)右對(duì)齊->'%8.2f'" % 659) #數(shù)字寬度8位,數(shù)字占了6位,剩余的兩位被空格占用
print("返回的數(shù)字寬度是8位,小數(shù)后兩位,設(shè)置左對(duì)齊->'%-8.2f'" % 659)
print("數(shù)字前顯示+號(hào)->'%+8.2f'" % 659)
print("數(shù)字前顯示-號(hào)->'%+8.2f'" % -659)
print("總寬度是8位,小數(shù)后兩位,剩余空位用0補(bǔ)齊->'%08.2f'" % 659)
運(yùn)行結(jié)果:
返回的數(shù)字寬度是8位,小數(shù)后兩位,默認(rèn)右對(duì)齊->' 659.00'
返回的數(shù)字寬度是8位,小數(shù)后兩位,設(shè)置左對(duì)齊->'659.00 '
數(shù)字前顯示+號(hào)->' +659.00'
數(shù)字前顯示-號(hào)->' -659.00'
總寬度是8位,小數(shù)后兩位,剩余空位用0補(bǔ)齊->'00659.00'
- 使用format()方法進(jìn)行字符串格式化
除了以上可以字符串格式化外,我們也可以通過format()方法進(jìn)行字符串格式化,而且它增強(qiáng)了字符串格式化的功能 。
使用format進(jìn)行格式化的格式: “{}”.format("傳入的字符串") ,在前面的字符串中需用{}來(lái)進(jìn)行占位,format()方法中是輸入的實(shí)際字符串 。同一字符串中可以有多個(gè)占位符 。
format也提供了兩種參數(shù),分別是位置參數(shù)和關(guān)鍵字參數(shù)。
print("今天星期{},張三買了{(lán)}斤蘋果".format('二',3))
print("我是位置參數(shù):{0} {1}".format('hello','python'))
print("我是關(guān)鍵字參數(shù):{x}".format(x='hello'))
運(yùn)行結(jié)果:
今天星期二,張三買了3斤蘋果
我是位置參數(shù):hello python
我是關(guān)鍵字參數(shù):hello
需要注意的是,位置參數(shù)和關(guān)鍵字參數(shù)可以結(jié)合起來(lái)使用,當(dāng)它們結(jié)合起來(lái)使用時(shí),位置參數(shù)必須放在關(guān)鍵字前面。
print("位置參數(shù)和關(guān)鍵字參數(shù)綜合應(yīng)用:{0} {x}".format('hello',x='python'))
#輸出:位置參數(shù)和關(guān)鍵字參數(shù)綜合應(yīng)用:hellop ython
- 字符串方法
以下為字符串的全部方法,可參考 。
列表
列表屬于有序序列的一種,在列表中可以對(duì)元素進(jìn)行增刪改查等操作 。
創(chuàng)建列表有兩種方式:分別是通過[]中添加元素和list()創(chuàng)建 。
通過[]創(chuàng)建時(shí),列表中的每個(gè)元素需要通過逗號(hào)隔開。列表中的每個(gè)元素可以是整數(shù)、字符串、布爾值,空值、列表、元組等任意一種數(shù)據(jù)類型。
lst1 = ['red',10,12.3]
lst2 = ['blue', None,True,['a','b'],('abc',123)]
print(lst1)
print(lst2)
運(yùn)行結(jié)果
['red', 10, 12.3]
['blue', None, True, ['a', 'b'], ('abc', 123)]
我們還可以通過list()方法創(chuàng)建列表,如下
lst3 = list() #創(chuàng)建了一個(gè)空列表
lst4 = list(['green',10,12.3])
print(lst3)
print(lst4)
運(yùn)行結(jié)果
[]
['green', 10, 12.3]
- 列表支持的方法
列表中同樣支持很多方法,也是我們最常用到的,具體如下:
lst=['orange', 'gold', 'black']
元組
元組是python的另外一種數(shù)據(jù)類型,和列表相比,它也是一個(gè)有序的集合。
元組和列表的差異
- 相同點(diǎn):列表和元組都是有序列表列表和元組的元素都是通過逗號(hào)隔開都支持存放不同數(shù)據(jù)類型的數(shù)據(jù)
- 不同點(diǎn)定義不同,列表使用[],元組使用()列表是可變序列,元組是不可變列表 ;即列表中的元素可以進(jìn)行增、刪、改、查,而元組的元素一旦定義就不能進(jìn)行修改,只能查詢?cè)?。也正是由于這個(gè)特性,元組比列表更加更全,假如你定義的數(shù)據(jù)不希望被別人修改時(shí),那么就可以定義為元組 。
定義元組后,就無(wú)法修改其中的元素,所以元組也沒有提供對(duì)應(yīng)的方法 。
字典
字典是一種無(wú)序的,可變的序列,它的每組元素都有鍵值對(duì)組成,中間用冒號(hào)分隔,如果有多組元素的話,元素與元素用逗號(hào)隔開 。
字典的語(yǔ)法格式如下:
d = {key1:value1,key2:value2}
字典類型的數(shù)據(jù)實(shí)際使用場(chǎng)景很廣,其中最典型的json數(shù)據(jù),里面的內(nèi)容就是由鍵值對(duì)組成 ;或者通過抓包的HTTP請(qǐng)求,你會(huì)發(fā)現(xiàn)請(qǐng)求報(bào)文數(shù)據(jù)也是有鍵值對(duì)組成 。
字典里的鍵必須是唯一的,可以是字符串、數(shù)字等不可變數(shù)據(jù)組成 ,值可以是任何數(shù)據(jù)類型。
- 字典支持的方法
字典中支持的常用方法如下:
d = {'zhangsan': 23, 'lisi': 35}
Set集合
集合(set)是一個(gè)無(wú)序的不重復(fù)元素的序列,集合中的元素都是一個(gè)唯一的,各不相同。
從語(yǔ)法格式上來(lái)看,set的創(chuàng)建和字典一樣,都是將元素放在一對(duì)大括號(hào){}內(nèi),相鄰元素之間用逗號(hào)(,)分隔 。主要注意的是:創(chuàng)建一個(gè)空集合必須使用set()而不是{},因?yàn)閧}是用來(lái)創(chuàng)建一個(gè)空字典。
- 集合支持的方法
set集合中也支持很多方法,多數(shù)的功能和上面介紹的都差不多,以下為set方法列表 。
s1={'c++','JAVA','python',10}
s2={'perl',12,'python'}