1. 程式人生 > >python基礎二之列表和元組(索引和切片)

python基礎二之列表和元組(索引和切片)

在python中,有幾種重要的操作可以適用於所有的序列,其中包括索引、切片、相加、相乘和成員資格檢查,另外Python中提供了一些內建函式,包含序列的長度,序列中最大值、最小值等。

     1、索引:序列中的所有元素都有索引,且從0開始遞增。我們可以通過索引的方式獲取元素,這種方式適應於所有的序列,當使用負索引時,Python將從最後一個元素開始往左數,因此(-1)是最後一個元素的位置。

#定義一個列表month
month=["january","february","match","aprill","may","june","july","august","september","october","november","december"]
#正向獲取元素
one=month[0]
two=month[1]
three=month[2]
four=month[3]
print("one:{}".format(one))
print("two:{}".format(two))
print("three:{}".format(three))
print("four:{}".format(four))
#負向獲取元素
one_negative=month[-1]
two_negative=month[-2]
three_negative=month[-3]
four_negative=month[-4]
print("one_negative:{}".format(one_negative))
print("two_negative:{}".format(two_negative))
print("three_negative:{}".format(three_negative))
print("four_negative:{}".format(four_negative))

輸出結果為:

one:january
two:february
three:match
four:aprill
one_negative:december
two_negative:november
three_negative:october
four_negative:september

 從輸出結果看出,正向索引從序列的第一個元素開始,索引0.然後逐漸遞增。負向索引從序列的最後一個元素開始,索引為(-1),然後逐漸遞減。兩種索引方式可以根據自己的需求使用,比如:想要得到靠前的幾個元素時,可以使用正數索引會容易數一些。當想要得到靠後面的幾個元素時,可以使用負數索引會容易數一些。當然,也沒有規定一定要用哪一種或者哪一種更好。可以完全根據自己的喜好和習慣來。

2、切片:除了通過索引來獲取當個元素外,我們也可以通過切片來獲取一定範圍內的元素。比如獲取從索引值為2到索引值為7的元素。使用兩個索引並用冒號分隔。且遵循包前不包尾的規則。例如:

month=["january","february","match","aprill","may","june","july","august","september","october","november","december"]
#包頭不包尾
number=month[2:3]
#而要訪問包括最後一個元素,可以使用
number_end=month[2:12]
number_nege=month[-3:-1]
print("number:{}".format(number))
print("number_end:{}".format(number_end))
print("number_nega:{}".format(number_nege))

輸出結果是:

number:['match']
number_end:['match', 'aprill', 'may', 'june', 'july', 'august', 'september', 'october', 'november', 'december']
number_nega:['october', 'november']

現在,我們可以嘗試這樣的一種操作,

number_negative=month[-3:0]
print("number_negative:{}".format(number_negative))

 我們可以嘗試著猜一猜答案。答案可能會令你吃一驚。

number_negative:[]

 對,沒看錯,是空值。執行切片操作的時候,有這樣一個規則,如果第一個索引指定的元素位於第二個索引指定的元素後面,那麼結果就是空序列。

另外,我們可以使用簡寫的方式來省略索引:

如果切片結束於末尾,可以省略第二個索引:

如果切片開始於開頭,可以省略第一個索引:

如果要複製整個序列,可以省略兩個索引:

ellipsis_end=month[3:]
ellipsis_stary=month[:4]
ellipsis_all=month[:]
print("ellipsis_end:{}".format(ellipsis_end))
print("ellipsis_stary:{}".format(ellipsis_stary))
print("ellipsis_all:{}".format(ellipsis_all))

輸出的結果是:

ellipsis_end:['aprill', 'may', 'june', 'july', 'august', 'september', 'october', 'november', 'december']
ellipsis_stary:['january', 'february', 'match', 'aprill']
ellipsis_all:['january', 'february', 'match', 'aprill', 'may', 'june', 'july', 'august', 'september', 'october', 'november', 'december']

 接下來來看另一個問題:步長。

當執行切片操作時,我們顯示或者隱式的指定起點和終點,但忽略了另一個引數:步長。在切片時,預設的步長是1,表示從一個元素移動到下一個元素,因此切片包含起點和終點之間的所有元素,例如:

step_size1=month[2:12:1]
print("step_size1:{}".format(step_size1))

其輸出結果為:

step_size1:['match', 'aprill', 'may', 'june', 'july', 'august', 'september', 'october', 'november', 'december']

現在我們來看一下步長為其他值時的結果:

step_size2=month[::2]
step_size3=month[::3]
step_size4=month[::4]
step_size5=month[::5]
print("step_size2:{}".format(step_size2))
print("step_size3:{}".format(step_size3))
print("step_size4:{}".format(step_size4))
print("step_size5:{}".format(step_size5))

輸出結果為:

step_size2:['january', 'match', 'may', 'july', 'september', 'november']
step_size3:['january', 'aprill', 'july', 'october']
step_size4:['january', 'may', 'september']
step_size5:['january', 'june', 'november']

 下面我們試一下當步長為負數時的情景:

step_size_2=month[8:3:-1]
step_size_3=month[::-2]
step_size_4=month[-2:-12:-4]
step_size_5=month[1:8:-2]
print("step_size_2:{}".format(step_size_2))
print("step_size_3:{}".format(step_size_3))
print("step_size_4:{}".format(step_size_4))
print("step_size_5:{}".format(step_size_5))

 輸出結果為:

step_size_2:['september', 'august', 'july', 'june', 'may']
step_size_3:['december', 'october', 'august', 'june', 'aprill', 'february']
step_size_4:['november', 'july', 'match']
step_size_5:[]

現在我們總結一下切片:當前我們接觸到的切片包括三個引數:起始索引,終點索引,步長。當步長為正數時,向左移動。當步長為負數時,向右移動。規則:如果第一個索引指定的元素位於第二個索引指定的元素後面,那麼結果就是空序列。