Python 代碼閲讀合集介紹:為什麼不推薦Python初學者直接看項目源碼
本篇閲讀的代碼實現了在一個列表中每間隔n個數取一個元素的功能。
本篇閲讀的代碼片段來自於30-seconds-of-python。
every_nth
def every_nth(lst, nth):
return lst[nth - 1::nth]
# EXAMPLES
print(every_nth([1, 2, 3, 4, 5, 6], 2)) # [ 2, 4, 6 ]
every_nth函數接收一個列表和間隔數nth,返回列表的取值結果。
函數使用列表切片的方式,獲取原列表每間隔nth個元素取值的結果。
s[i:j:k]的形式是s從i到j步長為k的切片。s從i到j步長為k的切片被定義為所有滿足0 <= n < (j-i)/k的索引號x = i + n*k的項組成的序列。 換句話説,索引號為i,i+k,i+2*k,i+3*k,以此類推,當達到j時停止 (但一定不包括j)。 當k為正值時,i和j會被減至不大於len(s)。 當k為負值時,i和j會被減至不大於len(s) - 1。 如果i或j被省略或為None,它們會定義為列表一端可以達到的“終止”值 (是哪一端的終止值則取決於k的符號)。 請注意,k不可為零。 如果k 為None,則當作1處理。
因為列表的索引是從0開始的,所以第一個被取出的數的索引是nth-1。因為j被省略,所以會一直計算到列表的末端。我們使用一個不那麼“恰好”的例子看一下:
>>> every_nth([1, 2, 3, 4, 5, 6, 7], 2) # [ 2, 4, 6 ]
[2, 4, 6]