博客 / 詳情

返回

Python代碼閲讀(第50篇):對列表間隔取元素

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]的形式是sij步長為k的切片。sij步長為k的切片被定義為所有滿足0 <= n < (j-i)/k的索引號x = i + n*k的項組成的序列。 換句話説,索引號為i,i+k,i+2*k,i+3*k,以此類推,當達到j時停止 (但一定不包括j)。 當k為正值時,ij會被減至不大於len(s)。 當k為負值時,ij會被減至不大於len(s) - 1。 如果ij被省略或為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]
user avatar FatTiger4399 頭像 ticktank 頭像 13917911249 頭像 yaoyaolx_wiki 頭像 backofhan 頭像 tingtr 頭像 async_wait 頭像 u_16099302 頭像
8 位用戶收藏了這個故事!

發佈 評論

Some HTML is okay.