python高級特性(1)

一邓线、切片

取一個list或tuple的部分元素是非常常見的操作。比如一個list如下:

>>> L = ['a', 'b', 'c', 'd', 'e']

取前三個元素煌恢,該怎么做骇陈?
笨方法:用循環(huán)實現(xiàn)

r = []
n = 3
for i in range(n):
        r.append(L[i])

用此方法十分繁瑣,因此瑰抵,Python提供了切片(Slice)操作符你雌,大大簡化 這種操作。
方括號中包含有三個參數(shù)L[a:b:c]二汛,其中a表示從第a個索引開始婿崭,b表示到第b個索引結(jié)束拨拓,但不包含b,c表示步長氓栈。

>>> L[0:3]
['a', 'b', 'c']

L[0:3]表示渣磷,從索引0開始,直到3為止授瘦,但不包含3醋界。即0, 1, 2三個元素
如果第一個索引是0,還可以省略:

>>> L[:3]
['a', 'b', 'c']

同樣索引值也可以是負(fù)的奥务,表示倒數(shù)切片

>>> L[-2:]
['d', 'e']
>>> L[-2:-1]
['d']

記孜锒馈:倒數(shù)第一個元素的索引是-1而不是0
括號內(nèi)甚至可以什么都不寫氯葬,只寫[:]這樣就可以原樣復(fù)制一個list:

>>> L[:]
['a', 'b', 'c', 'd', 'e']

tuple也是一種list挡篓,唯一的區(qū)別就是tuple不可變。因此帚称,tuple也可以用切片操作官研,只是操作的結(jié)果仍是tuple:

>>> (0, 1, 2, 3, 4, 5)[:3]
(0, 1, 2)

類似的字符串也可以看成是一種list,每個元素就是一個字符

>>> 'abcdefg'[:3]
'abc'
>>> 'abcdefg'[::2]
'aceg'

二闯睹、迭代

如果給定一個list或tuple戏羽,我們可以通過for循環(huán)來遍歷這個list或tuple,這種便利我們稱為迭代(Iteration)楼吃。
在Python中始花,迭代是通過for ... in來完成的,而很多語言比如C語言孩锡,迭代list是通過下表完成的酷宵,比如Java代碼:

for(i=0; i<list.length; i++){
        n = list[i];
}

可以看出,Python的for循環(huán)抽象程度要高于Java的for循環(huán)躬窜,因為Python的for循環(huán)不僅可以用在list或tuple上浇垦,還可以作用在其他可第二代對象上。
list這種數(shù)據(jù)類型雖然有下標(biāo)荣挨,但很多其他數(shù)據(jù)類型是沒有下標(biāo)的男韧,但是,只要是可迭代對象默垄,無論有無下標(biāo)此虑,都可以迭代,比如dict就可以:

>>> d = {'a' : 1, 'b' : 2, 'c' : 3}
>>> for key in d:
 . . .      print(key)
 . . .
a
c
b

因為dict的存儲不是按照list的方式順序排列厕倍,所以寡壮,迭代出的結(jié)果順序很可能不一樣。
默認(rèn)情況下讹弯, dict迭代的是key况既。如果要迭代value,可以用for value in d.values()组民,涂過要同時迭代key和value棒仍,可以用for k, v in d.items()
由于字符串也是可迭代對象臭胜,因此也可以作用于for循環(huán):

>>> for ch in 'abc':
. . .         print(ch)
. . . 
a
b
c

所以當(dāng)我們使用for循環(huán)時莫其,只要作用于一個可迭代對象,for循環(huán)就可以正常運行耸三, 而我們不太關(guān)心該對象是list還是其他數(shù)據(jù)類型乱陡。
如何判斷一個對象是可迭代對象呢?通過collections模塊中的Iterable類型判斷:

>>> from collections import Iterable
>>> isinstance('abc', Iterable)
True
>>> isinstance([1, 2, 3], Iterable)
True
>>> isinstance(123, Iterable)
False

最后一個小問題仪壮,如果要對list實現(xiàn)Java那樣的下標(biāo)循環(huán)怎么辦憨颠?Python中內(nèi)置的enumerate函數(shù)可以把一個list變成 索引-元素對,這樣就可以在循環(huán)中同時迭代索引和元素本身:

>>> for i, value in enumerate(['a', 'b', 'c']):
. . .        print(i, value)
. . .
0 a
1 b
2 c 

三积锅、列表生成式

列表生成式即List Comprehensions爽彤,是Python內(nèi)置的非常簡單卻強大的可以用來創(chuàng)建list的生成式。
比如缚陷,要生成list[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]可以用list(range(1, 11)):

>>> list(range(1, 11))
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

但是如果要生成[11, 22, 33, 44, ... , 10*10]呢适篙?方法一是循環(huán):

>>> L = []
>>> for x in range(1, 11):
. . .        L.append(x * x)
. . .
>>> L
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

但是太繁瑣了,而列表生成式則可以用一行語句代替循環(huán)生成上面的list:

>>> [x * x for x in range(1, 11)]
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

寫列表生成式時箫爷,把要生成的元素放在前米娜嚷节,后面跟上for循環(huán), 就可以把list創(chuàng)建出來虎锚。
還可以使用兩層循環(huán)硫痰,可以生成全排列:

>>> [m + n for m in 'ABC' for n in 'abc']
['Aa', 'Ab', 'Ac', 'Ba', 'Bb', 'Bc', 'Ca', 'Cb', 'Cc']

但是三層和三層以上的循環(huán)就很少用到了。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末翁都,一起剝皮案震驚了整個濱河市碍论,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌柄慰,老刑警劉巖鳍悠,帶你破解...
    沈念sama閱讀 217,826評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異坐搔,居然都是意外死亡藏研,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,968評論 3 395
  • 文/潘曉璐 我一進店門概行,熙熙樓的掌柜王于貴愁眉苦臉地迎上來蠢挡,“玉大人,你說我怎么就攤上這事∫堤ぃ” “怎么了禽炬?”我有些...
    開封第一講書人閱讀 164,234評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長勤家。 經(jīng)常有香客問我腹尖,道長,這世上最難降的妖魔是什么伐脖? 我笑而不...
    開封第一講書人閱讀 58,562評論 1 293
  • 正文 為了忘掉前任热幔,我火速辦了婚禮,結(jié)果婚禮上讼庇,老公的妹妹穿的比我還像新娘绎巨。我一直安慰自己,他們只是感情好蠕啄,可當(dāng)我...
    茶點故事閱讀 67,611評論 6 392
  • 文/花漫 我一把揭開白布场勤。 她就那樣靜靜地躺著,像睡著了一般介汹。 火紅的嫁衣襯著肌膚如雪却嗡。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,482評論 1 302
  • 那天嘹承,我揣著相機與錄音窗价,去河邊找鬼。 笑死叹卷,一個胖子當(dāng)著我的面吹牛撼港,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播骤竹,決...
    沈念sama閱讀 40,271評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼帝牡,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了蒙揣?” 一聲冷哼從身側(cè)響起靶溜,我...
    開封第一講書人閱讀 39,166評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎懒震,沒想到半個月后罩息,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,608評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡个扰,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,814評論 3 336
  • 正文 我和宋清朗相戀三年瓷炮,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片递宅。...
    茶點故事閱讀 39,926評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡娘香,死狀恐怖苍狰,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情烘绽,我是刑警寧澤淋昭,帶...
    沈念sama閱讀 35,644評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站诀姚,受9級特大地震影響响牛,放射性物質(zhì)發(fā)生泄漏玷禽。R本人自食惡果不足惜赫段,卻給世界環(huán)境...
    茶點故事閱讀 41,249評論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望矢赁。 院中可真熱鬧糯笙,春花似錦、人聲如沸撩银。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,866評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽额获。三九已至够庙,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間抄邀,已是汗流浹背耘眨。 一陣腳步聲響...
    開封第一講書人閱讀 32,991評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留境肾,地道東北人剔难。 一個月前我還...
    沈念sama閱讀 48,063評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像奥喻,于是被迫代替她去往敵國和親偶宫。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,871評論 2 354

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

  • 最近在慕課網(wǎng)學(xué)習(xí)廖雪峰老師的Python進階課程环鲤,做筆記總結(jié)一下重點纯趋。 基本變量及其類型 變量 在Python中,...
    victorsungo閱讀 1,681評論 0 5
  • 一冷离、python 變量和數(shù)據(jù)類型 1.整數(shù) Python可以處理任意大小的整數(shù)吵冒,當(dāng)然包括負(fù)整數(shù),在Python程序...
    績重KF閱讀 1,700評論 0 1
  • 與或運算 在計算 a and b 時酒朵,如果 a 是 False桦锄,則根據(jù)與運算法則,整個結(jié)果必定為 False蔫耽,因此...
    張文靖同學(xué)閱讀 314評論 0 1
  • 切片(Slice) 對經(jīng)常取指定索引范圍的操作结耀,需要用循環(huán)的操作留夜,Python提供了切片(Slice)操作符,能大...
    MrTrying閱讀 425評論 0 2
  • 你見图甜,或者不見我 我就在那里 不悲不喜 你念碍粥,或者不念我 情就在那里 不來不去 你愛,或者不愛我 愛就在那里 不增...
    旁觀者lina閱讀 166評論 0 0