《Python基礎(chǔ)教程》第2章 列表和元組

序列概覽

在Python中最基本的數(shù)據(jù)結(jié)構(gòu)是序列(sequence)叁丧。序列共有6種類型,本章只重點(diǎn)討論兩種:列表和元組风纠。該章的大致結(jié)構(gòu)為:

  • 通用序列操作
  • 列表
  • 元組

通用序列操作

所有的序列都能進(jìn)行某些特定的操作亚隙,并且Python還帶有計(jì)算長(zhǎng)度宾抓、尋找最大和最小元素等功能的內(nèi)建方法抑月。

索引

序列總所有的元素都是帶編號(hào)的树叽,0表示從第一位開始,-1表示從最后一位開始谦絮。字符串就是一個(gè)由字符組成序列:

>>> greeting = "Hello"
>>> greeting[0]
'H'
>>> "Hello"[-1]
'o'   

接下來(lái)該書實(shí)例給了一個(gè)小程序菱皆。當(dāng)做練習(xí)個(gè)人簡(jiǎn)單把要求抽象一下,如果你也是同我一樣剛剛?cè)腴TPython可以試著自己編編看:

要求用戶輸入年挨稿、月(1-12)、日(1-31)京痢,然后按照形如:September 12th,2014 的格式輸出構(gòu)建的字符串奶甘。

如下是自己構(gòu)建的一段代碼以及相應(yīng)的輸入輸出結(jié)果:

year = raw_input("Year:")
month = raw_input("Month(1-12):")
day = raw_input("Day(1-31):")

monthes = [
    "January",
    "February",
    "March",
    "April",
    "Ma",
    "June",
    "July",
    "August",
    "September",
    "October",
    "November",
    "December"
]
#此處個(gè)人對(duì)英文位數(shù)的后綴表示法理解有偏差
days = ['st', 'rd', 'rd', 'th', 'th', 'th', 'th', 'th', 'th', 'th', 'th', 'th', 'th', 'th', 'th', 'th', 'th', 'th', 'th', 'th', 'th', 'th', 'th', 'th', 'th', 'th', 'th', 'th', 'th', 'th', 'th'];

print monthes[int(month) - 1] + ' ' + day + days[int(day) - 1] + ',' + year

執(zhí)行即可看到如下結(jié)果:

$ python sequencePractise.py
Year:2015
Month(1-12):1
Day(1-31):5
January 5th,2015

相比之教程上的代碼,有些東西是可以改進(jìn)的
(1)在英文表達(dá)習(xí)慣中第1-3的后綴是st祭椰、nd臭家、rd, 其余則是th疲陕。比如:1st、12nd钉赁、23rd蹄殃、15th。
(2)因?yàn)檫€沒(méi)有學(xué)習(xí)分支(if else)所以這里用了一個(gè)長(zhǎng)度為31的元組來(lái)用于后綴的使用你踩。在Python中可以使用數(shù)組的拼接(跟Java和JavaScript比起來(lái)是新鮮的東西)诅岩,如下:
days = ['st', 'nd', 'rd'] + 7*['th']+['st', 'nd', 'rd'] + 7*['th']+['st', 'nd', 'rd'] + 7*['th']+['st'] + ['st']

分片

分片簡(jiǎn)而言之就是指定開始索引带膜、結(jié)束索引吩谦,然后得到一個(gè)子序列的操作。因?yàn)镻ython提供的分片操作非常靈活膝藕,一個(gè)一個(gè)介紹未必繁瑣式廷,下面列出書中的例子“磐欤可以先看輸入猜測(cè)輸出滑废,再實(shí)際操作或者看結(jié)果來(lái)印證:

> numbers = [1,2,3,4,5,6,7,8,9,10]
> numbers[3:6]   
[4, 5, 6] #注意索引為6的數(shù)字沒(méi)有算在內(nèi)

> numbers[-3:-1]  
[8, 9]

> numbers[-3:0]   
[] #第二個(gè)索引位置在第一個(gè)索引位置的前面

> numbers[-3:] 
[8,9,10]

> numbers[:-3] 
[1,2,3,4,5,6,7]

> numbers[:] 
[1,2,3,4,5,6,7,8,9,10] # 結(jié)果相當(dāng)于復(fù)制整個(gè)序列

> numbers[0:10:2] 
[1, 3, 5, 7, 9]#第三個(gè)參數(shù)為步長(zhǎng)

> numbers[8:3:-1]  
[9, 8, 7, 6, 5]#步長(zhǎng)可以為負(fù)數(shù),索引大小也要反過(guò)來(lái)

> numbers[0:10:-2] 
[]

> numbers[8::-2] 
[9, 7, 5, 3, 1]
> numbers[5::-2] 
[6, 4, 2]
> numbers[:5:-2] 
[10,8]
#如上三個(gè)例子可以知道當(dāng)其中一個(gè)索引沒(méi)傳值的時(shí)候袜爪,會(huì)根據(jù)步長(zhǎng)的正負(fù)來(lái)設(shè)置默認(rèn)的索引值蠕趁。
并且注意:索引所指向的值不包含在切片結(jié)果中。
序列相加
> [1,2,3]+[4,5,6]  
[1, 2, 3, 4, 5, 6]

> "Hello" + " World" 
"Hello World"

> "Hello" + [1,2,3]  
#結(jié)果:error饿敲,序列是分類型的妻导,只有同類型的序列才能相加
乘法

數(shù)字乘以序列會(huì)生成一個(gè)新的序列,新序列中原先的內(nèi)容被重復(fù)若干次怀各。

> "Python"*3
"PythonPythonPython"

> [42]*5
[42, 42, 42, 42, 42]
是否包含成員

使用in運(yùn)算符可以檢測(cè)一個(gè)知道是否包含在序列中:
> permission = 'rw'
> 'w' in permission
True

> users = ['admin', 'root']
> raw_input('Enter your name:') in users
Enter your name:admin
True
長(zhǎng)度倔韭、最小值和最大值
>>> numbers = [823, 428, 105]
>>> len(numbers)
3
>>> max(numbers)
823
>>> min(numbers)
105
>>> max(6,3,9,5)
9 #max、min也可以傳入多個(gè)參數(shù)來(lái)獲取最大最小值

列表

列表是可變的瓢对,并且有很多有用的寿酌、專門的方法。

list函數(shù)

函數(shù)不只是能對(duì)字符串使用硕蛹,對(duì)所有類型的序列都能用醇疼。如下為根據(jù)字符串創(chuàng)建列表的例子:

>>> list("Hello")
['H', 'e', 'l', 'l', 'o']
基本的列表操作

列表是序列的一種,那么所有序列的操作都是用于列表法焰,不同在于列表可以改變秧荆,該部分介紹改變列表的方法:元素賦值、元素刪除埃仪、分片賦值乙濒、列表方法(并非所有列表方法都能改變列表)。

  • 元素賦值
>>> x=[1,1,1]
>>> x[1]=2
>>> x
[1, 2, 1]
  • 刪除元素
>>> names = ['John', 'Swift', 'Skylar']
>>> del names[1]
>>> names
['John', 'Skylar']
  • 切片賦值
>>> name = list('Perl')
>>> name[2:] = list('ar')
>>> name
['P', 'e', 'a', 'r']

>>> name = list('Perl')
>>> name[1:] = list('ython')
>>> name
['P', 'y', 't', 'h', 'o', 'n']
#在這里我們使用了不等長(zhǎng)的列表進(jìn)行切片替換。

>>> numbers = [1,5]
>>> numbers[1:1] = [2,3,4]
>>> numbers
[1, 2, 3, 4, 5]
#這里起到了插入新元素的作用

>>> numbers = [1,2,3,4,5]
>>> numbers[1:4]=[]
>>> numbers
[1, 5]
#這里起到了刪除元素的作用颁股。結(jié)合利用步長(zhǎng)么库、負(fù)數(shù)可以有更多花樣。
列表方法
  • append
> [1,2,3].append(4)
[1,2,3,4]
  • count
> ['to', 'be', 'or', 'not', 'to', 'be'].count('to')
2
  • extend
a = [1, 2, 3]
b = [4, 5, 6]
a.extend(b)
a
[1, 2, 3, 4, 5, 6]
#可以看到a發(fā)生了改變甘有,這是與直接使用a+b不同的诉儒。

當(dāng)然該方法可以有別的如下兩種替代辦法:

> a = a + b
> a[len(a):] =  b
  • index
['to', 'be', 'or', 'not', 'to', 'be'].index('or')
2
  • insert
>>> numbers = [1, 2, 3, 4]
>>> numbers.insert(2, 'three')
>>> numbers
[1, 2, 'three', 3, 4]

如上操作也等價(jià)于切片操作:

>>> numbers[3:3]=['three']
  • pop
>>> numbers = [1,2,3]
>>> numbers.pop()
3
>>> numbers
[1, 2]

實(shí)現(xiàn)棧這種結(jié)構(gòu)就可以通過(guò)結(jié)合使用(append和pop這兩個(gè)方法來(lái)實(shí)現(xiàn))。實(shí)現(xiàn)隊(duì)列的話亏掀,則可以通過(guò)給pop和append添加為0的下標(biāo)作為第一個(gè)參數(shù)忱反。

  • remove
>>> x = ['to', 'be', 'or', 'not', 'to', 'be']
>>> x.remove('be')
>>> x
['to', 'or', 'not', 'to', 'be']

如上移除的為第一個(gè)匹配項(xiàng)。

  • reverse
>>> x = [1, 2, 3]
>>> x.reverse()
>>> x
[3, 2, 1]
  • sort
>>> x = [4,7,2,1,7,9]
>>> x.sort()
>>> x
[1, 2, 4, 7, 7, 9]

該書在介紹如上絕大多數(shù)方法中都提到了(1)是否返回值(2)是否改變列表本身幌氮。個(gè)人覺(jué)得缺乏使用經(jīng)驗(yàn)之前想要記憶住這些東西沒(méi)有實(shí)際意義缭受,真正使用的時(shí)候通過(guò)命令行簡(jiǎn)單測(cè)驗(yàn)就可以知道。

  • 高級(jí)排序

如果希望按照自己定義的規(guī)則對(duì)列表進(jìn)行排序该互,需要傳遞compare方法給sort米者,sort默認(rèn)使用的是內(nèi)建函數(shù)cmp(大于返回1,小于返回-1宇智,等于返回0)蔓搞。此處暫不詳細(xì)敘述,原理跟Java應(yīng)該是一樣的随橘。

>cmp(94, 39)
1

元組:不可變序列

如下列出了元組的常用表示法:

>1, 2, 3
(1, 2, 3)
>(1, 2, 3)
(1, 2, 3)
>()
()
> 42,
(42,)
> (42,) * 3
(42, 42, 42)
tuple函數(shù)

tuple是將序列轉(zhuǎn)化為元組的函數(shù)喂分,和列表總的list類似:

>>> tuple([1,2,3])
(1, 2, 3)
>>> tuple('hello')
('h', 'e', 'l', 'l', 'o')
元組基本操作

創(chuàng)建、訪問(wèn)机蔗、切片操作都和列表類似蒲祈。

元組存在的意義

一般來(lái)說(shuō),列表能夠滿足絕大多數(shù)的需要萝嘁。書中所提及元組存在的意義梆掸,現(xiàn)在還體會(huì)不深,暫且不管牙言。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末酸钦,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子咱枉,更是在濱河造成了極大的恐慌卑硫,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,682評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蚕断,死亡現(xiàn)場(chǎng)離奇詭異欢伏,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)亿乳,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,277評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門颜懊,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人,你說(shuō)我怎么就攤上這事河爹。” “怎么了桐款?”我有些...
    開封第一講書人閱讀 165,083評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵咸这,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我魔眨,道長(zhǎng)媳维,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,763評(píng)論 1 295
  • 正文 為了忘掉前任遏暴,我火速辦了婚禮侄刽,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘朋凉。我一直安慰自己州丹,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,785評(píng)論 6 392
  • 文/花漫 我一把揭開白布杂彭。 她就那樣靜靜地躺著墓毒,像睡著了一般。 火紅的嫁衣襯著肌膚如雪亲怠。 梳的紋絲不亂的頭發(fā)上所计,一...
    開封第一講書人閱讀 51,624評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音团秽,去河邊找鬼主胧。 笑死,一個(gè)胖子當(dāng)著我的面吹牛习勤,可吹牛的內(nèi)容都是我干的踪栋。 我是一名探鬼主播,決...
    沈念sama閱讀 40,358評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼姻报,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼己英!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起吴旋,我...
    開封第一講書人閱讀 39,261評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤损肛,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后荣瑟,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體治拿,經(jīng)...
    沈念sama閱讀 45,722評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評(píng)論 3 336
  • 正文 我和宋清朗相戀三年笆焰,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了劫谅。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,030評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖捏检,靈堂內(nèi)的尸體忽然破棺而出荞驴,到底是詐尸還是另有隱情,我是刑警寧澤贯城,帶...
    沈念sama閱讀 35,737評(píng)論 5 346
  • 正文 年R本政府宣布熊楼,位于F島的核電站,受9級(jí)特大地震影響能犯,放射性物質(zhì)發(fā)生泄漏鲫骗。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,360評(píng)論 3 330
  • 文/蒙蒙 一踩晶、第九天 我趴在偏房一處隱蔽的房頂上張望执泰。 院中可真熱鬧,春花似錦渡蜻、人聲如沸术吝。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,941評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)顿苇。三九已至,卻和暖如春税弃,著一層夾襖步出監(jiān)牢的瞬間纪岁,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,057評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工则果, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留幔翰,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,237評(píng)論 3 371
  • 正文 我出身青樓西壮,卻偏偏與公主長(zhǎng)得像遗增,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子款青,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,976評(píng)論 2 355

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

  • 數(shù)據(jù)結(jié)構(gòu)做修,是指通過(guò)某種方式(例如對(duì)元素進(jìn)行編號(hào))組織在一起的數(shù)據(jù)元素的集合,這些數(shù)據(jù)元素可以是數(shù)字或者字符抡草,甚至可...
    千釋炎閱讀 775評(píng)論 0 0
  • 第2章 列表和元組 ![](http://picture-repository-of-heamon7.qiniud...
    heamon7閱讀 264評(píng)論 0 2
  • 今天做了兩個(gè)嘗試: 1 第一次出去拍外景 2 拍完外景請(qǐng)照相的張師傅喝咖啡(順便套路) 拍外景一是找工作要用饰及,二是...
    夏齁咸閱讀 262評(píng)論 0 1
  • 每次一打開微信就想看看你有沒(méi)有給我發(fā)消息,然而卻沒(méi)有康震。忍住想找你的沖動(dòng)燎含,心里只有一陣陣難過(guò)
    Diana心情日記閱讀 224評(píng)論 0 0
  • 人生有很多種姿態(tài),應(yīng)對(duì)大千世界凡多事變腿短、形形色色的人兒屏箍。人生所有的經(jīng)歷又都可以概括為悲欣交集绘梦,緣人間事離不開愛恨糾...
    將離丶閱讀 422評(píng)論 1 3