Python學(xué)習(xí)筆記之列表

列表類型也是序列式的數(shù)據(jù)類型剩失。和字符串類型一樣,可以通過(guò)下標(biāo)或者切片操作來(lái)訪問(wèn)一個(gè)或者一段連續(xù)的元素册着。不同的是拴孤,字符串是不可變的,而列表具有可變?nèi)萜鞯奶匦约啄螅褂闷饋?lái)比較靈活演熟,列表容器的元素的數(shù)據(jù)類型可以是任意類型。

列表(list)

列表類型也是序列式的數(shù)據(jù)類型司顿。和字符串類型一樣芒粹,可以通過(guò)下標(biāo)或者切片操作來(lái)訪問(wèn)一個(gè)或者一段連續(xù)的元素。不同的是大溜,字符串是不可變的化漆,而列表具有可變?nèi)萜鞯奶匦裕斜砜梢蕴砑踊蛘邉h除元素猎提,此外列表類型的元素還可以是任意類型組合的获三。

列表的創(chuàng)建

創(chuàng)建一個(gè)列表比較簡(jiǎn)單旁蔼,和創(chuàng)建一個(gè)字符串是類似的,只不過(guò)列表是由([])來(lái)定義的疙教,元素類型可以是整形棺聊,浮點(diǎn)型,字符串贞谓,甚至還可以是列表限佩。

>>> aList = ['abc',123,4.56,['xyz',789,-28]]
>>> aList
['abc', 123, 4.56, ['xyz', 789, -28]]

列表的訪問(wèn)

列表的訪問(wèn)和字符串的訪問(wèn)方法是一樣的,都可以通過(guò)下標(biāo)或者切片操作來(lái)訪問(wèn)一個(gè)或者一段連續(xù)的數(shù)據(jù)元素裸弦。

>>> aList = ['abc',123,4.56,['xyz',789,-28]]
>>> aList[3]
['xyz', 789, -28]
>>> aList[0:3]
['abc', 123, 4.56]
>>> aList[3][2]
-28

列表的更新

與字符串不同的是祟同,列表具有可變性,所以理疙,列表可以更新某一元素的值晕城,還可以通過(guò)append()或者insert()方法來(lái)添加新的元素到列表中,同樣地窖贤,可以通過(guò)pop()或remove()方法刪除某一元素砖顷。

  • list.append(x)方法是把一個(gè)元素添加到鏈表的結(jié)尾
  • list.insert(index,x)方法是在指定位置插入一個(gè)元素
  • list.remove(x)方法是刪除列表中值為x的元素
  • list.pop([index])方法是刪除列表中索引為index的元素

代碼:

>>> aList = ['abc',123,4.56,['xyz',789,-28]]
>>> aList[0] = 'lmn'
>>> aList
['lmn', 123, 4.56, ['xyz', 789, -28]]
>>> aList.append('abc')
>>> aList
['lmn', 123, 4.56, ['xyz', 789, -28], 'abc']
>>> aList.remove('lmn')
>>> aList
[123, 4.56, ['xyz', 789, -28], 'abc']
>>> aList.pop(0)
123
>>> aList
[4.56, ['xyz', 789, -28], 'abc']

注意:pop()方法和remove()方法不同之處在于pop()方法是通過(guò)列表的索引進(jìn)行刪除元素并且返回刪除的元素值,而remove()是直接刪除一個(gè)元素值得赃梧。

列表類型操作符

因?yàn)榱斜硎菍儆谛蛄械囊活惵蓑穑孕蛄兄谐R?jiàn)的操作符(成員關(guān)系操作符(in 、not in)授嘀、連接操作符(+)物咳、重復(fù)操作符(*)、切片操作符([]蹄皱、[:]览闰、[::]))都適用于字符串。

列表解析

列表除了常見(jiàn)的序列類型的操作符之外夯接,列表?yè)碛兄粚儆谧约旱姆椒ā斜斫馕龌兰谩A斜斫馕鰜?lái)自于函數(shù)式編程Haskell纷妆。它是一種非常有用盔几、簡(jiǎn)單、而且靈活的工具掩幢,可以用來(lái)動(dòng)態(tài)地創(chuàng)建列表逊拍。

因?yàn)镻ython支持函數(shù)式編程特性,所以類似map()际邻、filter()芯丧、reduce()之類的方法可以通過(guò)列表解析,簡(jiǎn)化成一個(gè)列表解析式子世曾。

列表解析的語(yǔ)法:

[expr for iter_var in iterable]

該語(yǔ)法的核心在于for循環(huán)缨恒,它迭代iterable對(duì)象的所有條目,expr應(yīng)用于序列的每個(gè)成員,最后的結(jié)果值應(yīng)該是該表達(dá)式產(chǎn)生的列表骗露。

# 求0-9的平方和
>>> [x ** 2 for x in range(10)]
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

此外岭佳,還有一個(gè)類似的拓展版本較為常用 [expr for iter_var in iterable if cond_expr]

# 求0-9的平方和為偶數(shù)的數(shù)值
>>> [x ** 2 for x in range(10) if x % 2 == 0]
[0, 4, 16, 36, 64]

常用函數(shù)式編程工具

  • filter(function,sequence)方法是返回一個(gè)sequence(序列),包括了給定序列中所有調(diào)用function(item)后返回值為true的元素萧锉。

代碼:

>>> def div_3_or_div_5(x):
    return x % 3 == 0 or x % 5 == 0

>>> filter(div_3_or_div_5,range(0,21))
[0, 3, 5, 6, 9, 10, 12, 15, 18, 20]
  • map(function,sequence)方法是為每一個(gè)元素調(diào)用function(item)并將返回值組成一個(gè)新的列表返回珊随。

代碼:

>>> def cube(x):
    return x * x * x

>>> map(cube,range(0,4))
[0, 1, 8, 27]
  • reduce(function,sequence)方法是返回一個(gè)單值,他的構(gòu)造方法是:首先以序列的前兩個(gè)元素調(diào)用函數(shù)function柿隙,再以返回值和第三個(gè)參數(shù)調(diào)用叶洞,依次下去。

代碼:

>>> def sum(seq):
        def add(x, y):
            return x + y
        return reduce(add, seq, 0)

>>> sum(range(1,101))
5050

內(nèi)建函數(shù)

對(duì)于cmp()禀崖、len()衩辟、max()、min()波附、enumerate()以及zip()方法和字符串中的使用相同惭婿,在這里就不做具體說(shuō)明了。

序列類型函數(shù)

sorted()方法可以實(shí)現(xiàn)以ASCII碼值大小來(lái)排序列表中的成員叶雹。

>>> aList = ['cool','is','Python']
>>> sorted(aList)
['Python', 'cool', 'is']

reversed()方法可以實(shí)現(xiàn)列表的反轉(zhuǎn)财饥。

>>> aList = ['cool','is','Python']
>>> for x in reversed(alist):
    print x,


Python is cool

列表類型的內(nèi)建函數(shù)

  • list.append(x)方法是把一個(gè)元素添加到鏈表的結(jié)尾
  • list.insert(index,x)方法是在指定位置插入一個(gè)元素
  • list.remove(x)方法是刪除列表中值為x的元素
  • list.pop([index])方法是刪除列表中索引為index的元素
  • list.count(obj)返回一個(gè)對(duì)象在列表中出現(xiàn)的次數(shù)
  • list.extend(seq)把序列seq的內(nèi)容添加到列表中
  • list.reverse()原地反轉(zhuǎn)列表
  • list.sort(func=None,key=None,reverse=False)以指定的方式排序列表中的成員,如果func和key參數(shù)指定折晦,則按照指定的方式比較各個(gè)元素钥星,如果reverse標(biāo)志置為True,則列表以反序排列满着。

列表的特殊特性

因?yàn)榱斜硎怯腥萜骱涂勺兊奶匦郧矗晕覀兘?jīng)常用它來(lái)創(chuàng)建Python數(shù)據(jù)結(jié)構(gòu)中的堆棧和隊(duì)列。

堆棧的實(shí)現(xiàn)

堆棧的實(shí)現(xiàn)方式主要為“先進(jìn)后出”风喇,類似于我們清洗飯后的碗碟宁改。

源代碼:

class Stack():
    def __init__(self,size):
        self.list = []
        self.size = size
        self.top = -1
    def _Full(self):
        if self.top == self.size - 1:
            return True
        else:
            return False
    def _Empty(self):
        if self.top == -1:
            return True
        else:
            return False
    def instack(self,_list):
        if self._Full():
            print 'The stack is Full.'
        else:
            self.list.append(_list)
            self.top = self.top + 1
    def outstack(self):
        if self._Empty():
            print 'The stack is empty.!'
        else:
            self.list.pop()
            self.top = self.top - 1
# test

s = Stack(10)
print s._Full()
print s._Empty()
for i in range(10):
    s.instack(i)
print s._Full()
for i in range(10):
    s.outstack()
print s._Empty()

隊(duì)列的實(shí)現(xiàn)

隊(duì)列的實(shí)現(xiàn)方式主要為“先進(jìn)先出”,類似于我們生活中排隊(duì)魂莫。

源代碼:

class Queue():
    def __init__(self,size):
        self.list = []
        self.size = size
        self.front = -1
        self.rear = -1
    def _Empty(self):
        if self.front == self.rear:
            return True
        else:
            return False
    def _Full(self):
        if self.rear - self.front + 1 == self.size:
            return True
        else:
            return False
    def inqueue(self,_list):
        if self._Full():
            print 'The Queue is full.'
        else:
            self.list.append(_list)
            self.rear = self.rear + 1
    def outqueue(self):
        if self._Empty():
            print 'The Queue is empty.'
        else:
            self.list.pop()
            self.front = self.front + 1
#test

q = Queue(10)
print q._Empty()
print q._Full()
for i in range(10):
    q.inqueue(i)
print q._Full()
for i in range(10):
    q.outqueue()
print q._Empty()

堆棧和隊(duì)列的容器均之所以選擇列表list还蹲,而不選擇元組tuple,主要是因?yàn)榱斜砭哂锌梢赃M(jìn)行動(dòng)態(tài)修改,元組不允許修改耙考。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末谜喊,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子倦始,更是在濱河造成了極大的恐慌斗遏,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,941評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件鞋邑,死亡現(xiàn)場(chǎng)離奇詭異诵次,居然都是意外死亡账蓉,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,397評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門逾一,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)剔猿,“玉大人,你說(shuō)我怎么就攤上這事嬉荆」榫矗” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,345評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵鄙早,是天一觀的道長(zhǎng)汪茧。 經(jīng)常有香客問(wèn)我,道長(zhǎng)限番,這世上最難降的妖魔是什么舱污? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,851評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮弥虐,結(jié)果婚禮上扩灯,老公的妹妹穿的比我還像新娘。我一直安慰自己霜瘪,他們只是感情好珠插,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,868評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著颖对,像睡著了一般捻撑。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上缤底,一...
    開(kāi)封第一講書(shū)人閱讀 51,688評(píng)論 1 305
  • 那天顾患,我揣著相機(jī)與錄音,去河邊找鬼个唧。 笑死江解,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的徙歼。 我是一名探鬼主播犁河,決...
    沈念sama閱讀 40,414評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼鲁沥!你這毒婦竟也來(lái)了呼股?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,319評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤画恰,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后吸奴,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體允扇,經(jīng)...
    沈念sama閱讀 45,775評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡缠局,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了考润。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片狭园。...
    茶點(diǎn)故事閱讀 40,096評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖糊治,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情井辜,我是刑警寧澤绎谦,帶...
    沈念sama閱讀 35,789評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜吴叶,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,437評(píng)論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望构订。 院中可真熱鬧侮叮,春花似錦、人聲如沸悼瘾。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,993評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至卸勺,卻和暖如春砂沛,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背曙求。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,107評(píng)論 1 271
  • 我被黑心中介騙來(lái)泰國(guó)打工碍庵, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人悟狱。 一個(gè)月前我還...
    沈念sama閱讀 48,308評(píng)論 3 372
  • 正文 我出身青樓静浴,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親芽淡。 傳聞我的和親對(duì)象是個(gè)殘疾皇子马绝,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,037評(píng)論 2 355

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

  • http://python.jobbole.com/85231/ 關(guān)于專業(yè)技能寫完項(xiàng)目接著寫寫一名3年工作經(jīng)驗(yàn)的J...
    燕京博士閱讀 7,579評(píng)論 1 118
  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)挣菲,斷路器富稻,智...
    卡卡羅2017閱讀 134,659評(píng)論 18 139
  • 最近在慕課網(wǎng)學(xué)習(xí)廖雪峰老師的Python進(jìn)階課程,做筆記總結(jié)一下重點(diǎn)白胀。 基本變量及其類型 變量 在Python中椭赋,...
    victorsungo閱讀 1,691評(píng)論 0 5
  • 教程總綱:http://www.runoob.com/python/python-tutorial.html 進(jìn)階...
    健康哥哥閱讀 2,031評(píng)論 1 3
  • 我絕非有不認(rèn)同老馬的哲學(xué)向抢。我其實(shí)想說(shuō)自我心理暗示的作用认境。 百度一下,你就知道挟鸠,百度上解釋心理暗示是這么說(shuō)的:自我暗...
    如在畫中游閱讀 607評(píng)論 0 2