Python學(xué)習(xí)筆記(3)-----使用list和tuple

list

Python內(nèi)置的一種數(shù)據(jù)類型是列表:list鬓梅。list是一種有序的集合,可以隨時(shí)添加和刪除其中的元素谨湘。

比如绽快,列出班里所有同學(xué)的名字,就可以用一個(gè)list表示:

>>> classmates = ['Michael', 'Bob', 'Tracy']
>>> classmates
['Michael', 'Bob', 'Tracy']

變量classmates就是一個(gè)list紧阔。用len()函數(shù)可以獲得list元素的個(gè)數(shù):

>>> len(classmates)
3

用索引來(lái)訪問(wèn)list中每一個(gè)位置的元素坊罢,記得索引是從0開始的:

>>> classmates[0]
'Michael'
>>> classmates[1]
'Bob'
>>> classmates[2]
'Tracy'
>>> classmates[3]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: list index out of range

當(dāng)索引超出了范圍時(shí),Python會(huì)報(bào)一個(gè)IndexError錯(cuò)誤擅耽,所以活孩,要確保索引不要越界,記得最后一個(gè)元素的索引是len(classmates) - 1乖仇。

如果要取最后一個(gè)元素憾儒,除了計(jì)算索引位置外,還可以用-1做索引乃沙,直接獲取最后一個(gè)元素:

>>> classmates[-1]
'Tracy'

以此類推起趾,可以獲取倒數(shù)第2個(gè)、倒數(shù)第3個(gè):

>>> classmates[-2]
'Bob'
>>> classmates[-3]
'Michael'
>>> classmates[-4]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: list index out of range

當(dāng)然崔涂,倒數(shù)第4個(gè)就越界了阳掐。

list是一個(gè)可變的有序表始衅,所以冷蚂,可以往list中追加元素到末尾:

>>> classmates.append('Adam')
>>> classmates
['Michael', 'Bob', 'Tracy', 'Adam']

也可以把元素插入到指定的位置,比如索引號(hào)為1的位置:

>>> classmates.insert(1, 'Jack')
>>> classmates
['Michael', 'Jack', 'Bob', 'Tracy', 'Adam']

要?jiǎng)h除list末尾的元素汛闸,用pop()方法:

>>> classmates.pop()
'Adam'
>>> classmates
['Michael', 'Jack', 'Bob', 'Tracy']

要?jiǎng)h除指定位置的元素蝙茶,用pop(i)方法,其中i是索引位置:

>>> classmates.pop(1)
'Jack'
>>> classmates
['Michael', 'Bob', 'Tracy']

要把某個(gè)元素替換成別的元素诸老,可以直接賦值給對(duì)應(yīng)的索引位置:

>>> classmates[1] = 'Sarah'
>>> classmates
['Michael', 'Sarah', 'Tracy']

list里面的元素的數(shù)據(jù)類型也可以不同隆夯,比如:

>>> L = ['Apple', 123, True]

list元素也可以是另一個(gè)list,比如:

>>> s = ['python', 'java', ['asp', 'php'], 'scheme']
>>> len(s)
4

要注意s只有4個(gè)元素别伏,其中s[2]又是一個(gè)list蹄衷,如果拆開寫就更容易理解了:

>>> p = ['asp', 'php']
>>> s = ['python', 'java', p, 'scheme']

要拿到'php'可以寫p[1]或者s[2][1],因此s可以看成是一個(gè)二維數(shù)組厘肮,類似的還有三維愧口、四維……數(shù)組,不過(guò)很少用到类茂。

如果一個(gè)list中一個(gè)元素也沒(méi)有耍属,就是一個(gè)空的list托嚣,它的長(zhǎng)度為0:

>>> L = []
>>> len(L)
0

  • tuple

另一種有序列表叫元組:tuple。tuple和list非常類似厚骗,但是tuple一旦初始化就不能修改示启,比如同樣是列出同學(xué)的名字:

>>> classmates = ('Michael', 'Bob', 'Tracy')

現(xiàn)在,classmates這個(gè)tuple不能變了领舰,它也沒(méi)有append()夫嗓,insert()這樣的方法。其他獲取元素的方法和list是一樣的冲秽,你可以正常地使用classmates[0]啤月,classmates[-1],但不能賦值成另外的元素劳跃。

不可變的tuple有什么意義谎仲?因?yàn)閠uple不可變,所以代碼更安全刨仑。如果可能郑诺,能用tuple代替list就盡量用tuple。

tuple的陷阱:當(dāng)你定義一個(gè)tuple時(shí)杉武,在定義的時(shí)候辙诞,tuple的元素就必須被確定下來(lái),比如:

>>> t = (1, 2)
>>> t
(1, 2)

如果要定義一個(gè)空的tuple轻抱,可以寫成()

>>> t = ()
>>> t
()

但是飞涂,要定義一個(gè)只有1個(gè)元素的tuple,如果你這么定義:

>>> t = (1)
>>> t
1

定義的不是tuple祈搜,是1這個(gè)數(shù)较店!這是因?yàn)槔ㄌ?hào)()既可以表示tuple,又可以表示數(shù)學(xué)公式中的小括號(hào)容燕,這就產(chǎn)生了歧義梁呈,因此,Python規(guī)定蘸秘,這種情況下官卡,按小括號(hào)進(jìn)行計(jì)算,計(jì)算結(jié)果自然是1醋虏。

所以寻咒,只有1個(gè)元素的tuple定義時(shí)必須加一個(gè)逗號(hào),,來(lái)消除歧義:

>>> t = (1,)
>>> t
(1,)

Python在顯示只有1個(gè)元素的tuple時(shí)颈嚼,也會(huì)加一個(gè)逗號(hào),毛秘,以免你誤解成數(shù)學(xué)計(jì)算意義上的括號(hào)。

最后來(lái)看一個(gè)“可變的”tuple:

>>> t = ('a', 'b', ['A', 'B'])
>>> t[2][0] = 'X'
>>> t[2][1] = 'Y'
>>> t
('a', 'b', ['X', 'Y'])

這個(gè)tuple定義的時(shí)候有3個(gè)元素粘舟,分別是'a'熔脂,'b'和一個(gè)list佩研。不是說(shuō)tuple一旦定義后就不可變了嗎?怎么后來(lái)又變了霞揉?

別急旬薯,我們先看看定義的時(shí)候tuple包含的3個(gè)元素:

tuple-0

當(dāng)我們把list的元素'A''B'修改為'X''Y'后,tuple變?yōu)椋?/p>

tuple-1

表面上看适秩,tuple的元素確實(shí)變了绊序,但其實(shí)變的不是tuple的元素,而是list的元素秽荞。tuple一開始指向的list并沒(méi)有改成別的list骤公,所以,tuple所謂的“不變”是說(shuō)扬跋,tuple的每個(gè)元素阶捆,指向永遠(yuǎn)不變。即指向'a'钦听,就不能改成指向'b'洒试,指向一個(gè)list,就不能改成指向其他對(duì)象朴上,但指向的這個(gè)list本身是可變的垒棋!

理解了“指向不變”后,要?jiǎng)?chuàng)建一個(gè)內(nèi)容也不變的tuple怎么做痪宰?那就必須保證tuple的每一個(gè)元素本身也不能變叼架。

  • 練習(xí)

請(qǐng)用索引取出下面list的指定元素:

-- coding: utf-8 --

L = [
    ['Apple', 'Google', 'Microsoft'],
    ['Java', 'Python', 'Ruby', 'PHP'],
    ['Adam', 'Bart', 'Lisa']
]
# 打印Apple:
print(?)
# 打印Python:
print(?)
# 打印Lisa:
print(?)
  • 小結(jié)

list和tuple是Python內(nèi)置的有序集合,一個(gè)可變衣撬,一個(gè)不可變乖订。根據(jù)需要來(lái)選擇使用它們。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末淮韭,一起剝皮案震驚了整個(gè)濱河市垢粮,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌靠粪,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,000評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件毫蚓,死亡現(xiàn)場(chǎng)離奇詭異占键,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)元潘,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,745評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門畔乙,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人翩概,你說(shuō)我怎么就攤上這事牲距》翟郏” “怎么了?”我有些...
    開封第一講書人閱讀 168,561評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵牍鞠,是天一觀的道長(zhǎng)咖摹。 經(jīng)常有香客問(wèn)我,道長(zhǎng)难述,這世上最難降的妖魔是什么萤晴? 我笑而不...
    開封第一講書人閱讀 59,782評(píng)論 1 298
  • 正文 為了忘掉前任,我火速辦了婚禮胁后,結(jié)果婚禮上店读,老公的妹妹穿的比我還像新娘。我一直安慰自己攀芯,他們只是感情好屯断,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,798評(píng)論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著侣诺,像睡著了一般裹纳。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上紧武,一...
    開封第一講書人閱讀 52,394評(píng)論 1 310
  • 那天剃氧,我揣著相機(jī)與錄音,去河邊找鬼阻星。 笑死朋鞍,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的妥箕。 我是一名探鬼主播滥酥,決...
    沈念sama閱讀 40,952評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼畦幢!你這毒婦竟也來(lái)了坎吻?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,852評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤宇葱,失蹤者是張志新(化名)和其女友劉穎瘦真,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體黍瞧,經(jīng)...
    沈念sama閱讀 46,409評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡诸尽,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,483評(píng)論 3 341
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了印颤。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片您机。...
    茶點(diǎn)故事閱讀 40,615評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出际看,到底是詐尸還是另有隱情咸产,我是刑警寧澤,帶...
    沈念sama閱讀 36,303評(píng)論 5 350
  • 正文 年R本政府宣布仲闽,位于F島的核電站脑溢,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏蔼囊。R本人自食惡果不足惜焚志,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,979評(píng)論 3 334
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望畏鼓。 院中可真熱鬧酱酬,春花似錦、人聲如沸云矫。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,470評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)让禀。三九已至挑社,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間巡揍,已是汗流浹背痛阻。 一陣腳步聲響...
    開封第一講書人閱讀 33,571評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留腮敌,地道東北人阱当。 一個(gè)月前我還...
    沈念sama閱讀 49,041評(píng)論 3 377
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像糜工,于是被迫代替她去往敵國(guó)和親弊添。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,630評(píng)論 2 359

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

  • Python創(chuàng)建List Python創(chuàng)建list Python內(nèi)置的一種數(shù)據(jù)類型是列表:list捌木。list是一種...
    極客小寨閱讀 484評(píng)論 0 0
  • Python 是一種相當(dāng)高級(jí)的語(yǔ)言油坝,通過(guò) Python 解釋器把符合語(yǔ)法的程序代碼轉(zhuǎn)換成 CPU 能夠執(zhí)行的機(jī)器碼...
    Python程序媛閱讀 1,914評(píng)論 0 3
  • 最近在慕課網(wǎng)學(xué)習(xí)廖雪峰老師的Python進(jìn)階課程,做筆記總結(jié)一下重點(diǎn)刨裆。 基本變量及其類型 變量 在Python中澈圈,...
    victorsungo閱讀 1,701評(píng)論 0 5
  • 一屹电、python 變量和數(shù)據(jù)類型 1.整數(shù) Python可以處理任意大小的整數(shù),當(dāng)然包括負(fù)整數(shù)台囱,在Python程序...
    績(jī)重KF閱讀 1,714評(píng)論 0 1
  • Concordion 是什么 Concordion 是一種 自動(dòng)化測(cè)試框架 领虹,是測(cè)試及文檔,Specifica...
    rangel閱讀 1,194評(píng)論 0 0