Python基礎(chǔ)數(shù)據(jù)類型學(xué)習(xí)2:列表

一达址、列表的簡介

列表是包含0個或多個對象引用的有序序列蔑祟,由于列表中所有數(shù)據(jù)項實際上都是對對象的引用,所以列表內(nèi)可以存放任意數(shù)據(jù)類型的數(shù)據(jù)項沉唠,比如列表與元組疆虚。與元組不同的是,列表是可變的满葛,我們可以很容易的對列表中的項進(jìn)行刪除或替換径簿、刪除。

二嘀韧、列表的創(chuàng)建

空列表可使用中括號[]來創(chuàng)建篇亭,也可以使用list()函數(shù)進(jìn)行創(chuàng)建。
非空列表的創(chuàng)建:一是可以使用中括號[]包含一個或多個用逗號分隔的數(shù)據(jù)項來創(chuàng)建锄贷;二是使用list()函數(shù)進(jìn)行創(chuàng)建译蒂,list()函數(shù)只接受一個參數(shù),所以可以提供一個由()包括的一個或多個用逗號分隔的數(shù)據(jù)項做為一個參數(shù)傳遞給list()函數(shù)谊却,或是將其它對象(例如元組柔昼、字符串)傳遞給list()函數(shù),list()函數(shù)就會嘗試將給定的對象轉(zhuǎn)換為列表炎辨;
示例:

>>>a=[]  #創(chuàng)建空列表
>>>b=list()  #利用函數(shù)創(chuàng)建空列表
>>>c=[1,2,3]  #創(chuàng)建含項的列表
>>>d=list((1,2,3))  #利用函數(shù)創(chuàng)建含項的列表
>>>e=(1,2,3)
>>>e
(1,2,3)
>>>f=list(e)  #利用list()函數(shù)將元組轉(zhuǎn)換為列表
>>>f
[1,2,3]

三是使用列表內(nèi)涵的方法來創(chuàng)建列表捕透,小的列表我們通常可以直接使用列表定義來來創(chuàng)建碴萧,但對于一些數(shù)據(jù)項比較多的列表乙嘀,就需要使用程序來進(jìn)行創(chuàng)建了。列表內(nèi)涵就是指使用一個在方括號中按規(guī)定的邏輯規(guī)則通過判斷或循環(huán)條件來生成需要數(shù)據(jù)項的列表破喻。
列表內(nèi)涵的語法格式:
[expression for item in iterable (if condition)]
(if condition)條件語句是根據(jù)你的需求可選的乒躺。
例如:我們要將100以內(nèi)的偶數(shù)生成一個列表:

>>> a=[]  #按一般程序來生成的列表
>>> for x in range(1,100):  #此處range函數(shù)作用是逐項返回1至100之間的整數(shù)項
    if x%2==0:
        a.append(x)  #將偶數(shù)加入到a列表的結(jié)尾
>>> a
[2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 74, 76, 78, 80, 82, 84, 86, 88, 90, 92, 94, 96, 98]
>>>b=[x for x in range(0,100)]
>>>b
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99]
>>>c=[x for x in range(1,100) if x%2==0]  #使用函數(shù)內(nèi)涵生成列表
>>> c
[2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 74, 76, 78, 80, 82, 84, 86, 88, 90, 92, 94, 96, 98]

同時使用列表內(nèi)涵也可以進(jìn)行嵌套。

>>> a=[str(x)+y+z for x in [1,2,3] for y in "abc" for z in ["abc","def","ghi","jkl"] if not (x==1 and y=="b")]
>>> a
['1aabc', '1adef', '1aghi', '1ajkl', '1cabc', '1cdef', '1cghi', '1cjkl', '2aabc', '2adef', '2aghi', '2ajkl', '2babc', '2bdef', '2bghi', '2bjkl', '2cabc', '2cdef', '2cghi', '2cjkl', '3aabc', '3adef', '3aghi', '3ajkl', '3babc', '3bdef', '3bghi', '3bjkl', '3cabc', '3cdef', '3cghi', '3cjkl']

三低缩、列表的操作

(一)列表的方法

對于列表我們可以使用以下的方法進(jìn)行操作:

語法 用途
list.append(x) 將數(shù)據(jù)項x追加到列表的尾部
list.count(x) 統(tǒng)計x在列表中出現(xiàn)的次數(shù)并返回
list.entend(y)
list+=y
將列表y中的項追加到list的結(jié)尾
list.index(x,start,end) 返回數(shù)據(jù)項x在列表中(或是在列表中start至end分區(qū)區(qū)塊中)從最左算起出現(xiàn)的位置嘉冒,如不存在就返回一個ValueError異常
list.insert(i,x) 在列表的第i項(i為整數(shù))處插入數(shù)據(jù)項x
list.pop() 返回并刪除列表最右的數(shù)據(jù)項
list.pop(i) 返回并刪除列表第i項的數(shù)據(jù)項
list.remove(x) 將列表中從左邊算起第一個數(shù)據(jù)項x移除曹货,如果x不存在就產(chǎn)生一個ValueError異常
list.reverse() 將列表進(jìn)行反轉(zhuǎn)
list.sort(...) 對列表中的數(shù)據(jù)項進(jìn)行排序

(二)列表項的讀取

對于列表中項的讀取我們可以使用索引位置、分片或是序列拆分的方式進(jìn)行讀取讳推,我們首先創(chuàng)建一個示例列表:

>>>stu=["zhang","上海",16,"181厘米",["足球","羽毛球","english"]]
>>>stu
['zhang', '上海', 16, '181厘米', ['足球', '羽毛球', 'english']]

示例:

>>>stu[1]
'上海'
>>>stu[-4]  #負(fù)值從列表最右側(cè)開始讀取項
'上海'
>>>stu[0][2]  #對于python來說字符串也是對象顶籽,也可以進(jìn)行位置索引和分片
’a'
>>> stu[-1][2]  #對于嵌套的列表也可以使用位置索引
'english'
>>> stu[2:]  #分片讀取
[16, '181厘米', ['足球', '羽毛球', 'english']]
>>>stu[-1][:2]
['足球', '羽毛球']
>>> stu[-1][1][2]
'球'
>>stu[::2]  #使用分片讀取數(shù)據(jù)項時,第三個參數(shù)為讀取數(shù)據(jù)的步距银觅,這里的2表示每隔2個讀取數(shù)據(jù),即讀取0礼饱、2、4位置上的數(shù)據(jù)究驴。
['zhang', 16, ['足球', '羽毛球', 'english']]

在有些情況下镊绪,我們也使用序列拆分的方式來實現(xiàn)對于數(shù)據(jù)項的讀取。序列拆分需要使用拆分操作符*來進(jìn)行洒忧。下面通過實例展示其用法:

>>>a,*b=[1,2,3,4]
>>> a
1
>>> b
[2, 3, 4]
>>>a,*b,c=[1,2,3,4]
>>> a
1
>>> b
[2, 3]
>>> c
4

(三)列表中項的修改和列表項的添加

  1. 列表內(nèi)的數(shù)據(jù)項的修改
    利用索引位置修改數(shù)據(jù)項:
>>> stu=["zhang","上海",16,"181厘米",["足球","羽毛球","english"]]
>>>stu[2]=18
>>> stu
['zhang', '上海', 18, '181厘米', ['足球', '羽毛球', 'english']]
>>> stu[4][2]="英語"
>>> stu
['zhang', '上海', 18, '181厘米', ['足球', '羽毛球', '英語']]

除了按索引位置對數(shù)據(jù)項進(jìn)行修改蝴韭,還可以通過分片來對整個分片數(shù)據(jù)進(jìn)行修改和替換,分片的長度與你的提供的數(shù)據(jù)項并不必須是等長的熙侍,如果提供的數(shù)據(jù)項比分片長度少榄鉴,那么就會使列表變短;反之蛉抓,就會使列表變長庆尘。

>>> stu[0:2]=["zhao","南京"]
>>> stu
['zhao', '南京', 18, '181厘米', ['足球', '羽毛球', '英語']]
>>> stu[4][2:]=["乒乓球","棒球"]
>>> stu
['zhao', '南京', 18, '181厘米', ['足球', '羽毛球', '乒乓球', '棒球']]
  1. 列表數(shù)據(jù)項的添加
    在列表的結(jié)尾處添加數(shù)據(jù)項我們可以使用+=運算符或是list.append()和list.extend()方法。它們的區(qū)別是list.append()方法只能將單個數(shù)據(jù)項添加到列表結(jié)尾巷送,而+=和list.extend()則可以添加多個數(shù)據(jù)項到列表結(jié)尾驶忌。
>>> stu+=["80公斤","近視"]
>>> stu
['zhao', '南京', 18, '181厘米', ['足球', '羽毛球', '乒乓球', '棒球'], '80公斤', '近視']
>>> stu[4].extend(["武術(shù)","圍棋"])
>>> stu
['zhao', '南京', 18, '181厘米', ['足球', '羽毛球', '乒乓球', '棒球', '武術(shù)', '圍棋'], '80公斤', '近視']
>>> stu.append("35號")
>>> stu
['zhao', '南京', 18, '181厘米', ['足球', '羽毛球', '乒乓球', '棒球', '武術(shù)', '圍棋'], '80公斤', '近視', '35號']

而對于在指定位置添加數(shù)據(jù)項可以使用list.insert()方法和分片。

>>> stu.insert(1,"男")
>>> stu
['zhao', '男', '南京', 18, '181厘米', ['足球', '羽毛球', '乒乓球', '棒球', '武術(shù)', '圍棋'], '80公斤', '近視', '35號']
>>> stu[3:3]=["1999-06"]   #這里要注意添加的數(shù)據(jù)項一定要用中括號括上笑跛,否則python會將"1999-06"拆分為7個字符付魔,向原列表中添加7個數(shù)據(jù)項
>>> stu
['zhao', '男', '南京', '1999-06', 18, '181厘米', ['足球', '羽毛球', '乒乓球', '棒球', '武術(shù)', '圍棋'], '80公斤', '近視', '35號']

(四)列表數(shù)據(jù)項的移除

移除列表中的數(shù)據(jù)項方法有很多種,可以使用list.pop()或是list.remove()方法堡牡,也可以使用del語句和分片抒抬。下面以實例說明:

>>> stu
['zhao', '男', '南京', '1996-06', 18, '181厘米', ['足球', '羽毛球', '乒乓球', '棒球', '武術(shù)', '圍棋'], '80公斤', '近視', '35號']
>>> stu[6].pop()  #使用不帶參數(shù)的pop()方法時直接刪除并返回最右側(cè)的數(shù)據(jù)項
'圍棋'
>>> stu.pop(3)  #使用帶索引位置的pop()方法可直接將指定索引位置的數(shù)據(jù)項移除
'1996-06' 
>>> stu.remove('男')  #使用remove()方法移除掉從最左側(cè)第一個相符的數(shù)據(jù)項
>>> stu
['zhao', '南京', 18, '181厘米', ['足球', '羽毛球', '乒乓球', '棒球', '武術(shù)'], '80公斤', '近視', '35號']
>>> stu[1:3]=[]  #將索引位置1至2的分片賦值空列表杨刨,相當(dāng)于刪除索引位置1和2處的數(shù)據(jù)項
>>> stu
['zhao', '181厘米', ['足球', '羽毛球', '乒乓球', '棒球', '武術(shù)'], '80公斤', '近視', '35號']
>>> del stu[2][1:4]
>>> stu
['zhao', '181厘米', ['足球', '武術(shù)'], '80公斤', '近視', '35號']

(五)列表的排序和反轉(zhuǎn)

對于列表的排序我們可以使用list.sort()方法或是sorted()晤柄。區(qū)別在于使用list.sort()會直接對列表本身進(jìn)行排序修改,而使用sorted()則生成一個新的排序列表妖胀,而原列表不做更改芥颈。sorted()的用法很多,這里只介紹一下最簡單的赚抡。

>>> a=[2,4,3,1,8,3,5,2]
>>> a.sort()
>>> a
[1, 2, 2, 3, 3, 4, 5, 8]
>>> b=["ab","a","dge","rdw","cf"]
>>> b.sort()
>>> b
['a', 'ab', 'cf', 'dge', 'rdw']
>>> c=[3,7,4,6,7,1,0]
>>> sorted(c)
[0, 1, 3, 4, 6, 7, 7]
>>> c  #使用sorted()進(jìn)行排序原列表沒有更改
[3, 7, 4, 6, 7, 1, 0]

使用list.reverse()可對整個列表進(jìn)行反轉(zhuǎn)爬坑。

>>> stu
['zhao', '181厘米', ['足球', '武術(shù)'], '80公斤', '近視', '35號']
>>> stu.reverse()
>>> stu
['35號', '近視', '80公斤', ['足球', '武術(shù)'], '181厘米', 'zhao']

(六)列表的其他操作

列表還支持使用in與not in進(jìn)行成員關(guān)系測試,同時可以使用+和+=進(jìn)行擴展連接涂臣,使用=進(jìn)行復(fù)制操作盾计。具體的大家可以自行測試售担。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市署辉,隨后出現(xiàn)的幾起案子族铆,更是在濱河造成了極大的恐慌,老刑警劉巖哭尝,帶你破解...
    沈念sama閱讀 218,755評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件哥攘,死亡現(xiàn)場離奇詭異,居然都是意外死亡材鹦,警方通過查閱死者的電腦和手機逝淹,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來桶唐,“玉大人栅葡,你說我怎么就攤上這事∶Ш欤” “怎么了妥畏?”我有些...
    開封第一講書人閱讀 165,138評論 0 355
  • 文/不壞的土叔 我叫張陵,是天一觀的道長安吁。 經(jīng)常有香客問我醉蚁,道長,這世上最難降的妖魔是什么鬼店? 我笑而不...
    開封第一講書人閱讀 58,791評論 1 295
  • 正文 為了忘掉前任网棍,我火速辦了婚禮,結(jié)果婚禮上妇智,老公的妹妹穿的比我還像新娘滥玷。我一直安慰自己,他們只是感情好巍棱,可當(dāng)我...
    茶點故事閱讀 67,794評論 6 392
  • 文/花漫 我一把揭開白布惑畴。 她就那樣靜靜地躺著,像睡著了一般航徙。 火紅的嫁衣襯著肌膚如雪如贷。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,631評論 1 305
  • 那天到踏,我揣著相機與錄音杠袱,去河邊找鬼。 笑死窝稿,一個胖子當(dāng)著我的面吹牛楣富,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播伴榔,決...
    沈念sama閱讀 40,362評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼纹蝴,長吁一口氣:“原來是場噩夢啊……” “哼庄萎!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起塘安,我...
    開封第一講書人閱讀 39,264評論 0 276
  • 序言:老撾萬榮一對情侶失蹤惨恭,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后耙旦,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體脱羡,經(jīng)...
    沈念sama閱讀 45,724評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年免都,在試婚紗的時候發(fā)現(xiàn)自己被綠了锉罐。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,040評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡绕娘,死狀恐怖脓规,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情险领,我是刑警寧澤侨舆,帶...
    沈念sama閱讀 35,742評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站绢陌,受9級特大地震影響挨下,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜脐湾,卻給世界環(huán)境...
    茶點故事閱讀 41,364評論 3 330
  • 文/蒙蒙 一臭笆、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧秤掌,春花似錦愁铺、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至孟岛,卻和暖如春瓶竭,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背蚀苛。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評論 1 270
  • 我被黑心中介騙來泰國打工在验, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留玷氏,地道東北人堵未。 一個月前我還...
    沈念sama閱讀 48,247評論 3 371
  • 正文 我出身青樓,卻偏偏與公主長得像盏触,于是被迫代替她去往敵國和親渗蟹。 傳聞我的和親對象是個殘疾皇子块饺,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,979評論 2 355

推薦閱讀更多精彩內(nèi)容