Python程式碼閱讀(第36篇):列表偏移

Felix發表於2021-11-16
Python 程式碼閱讀合集介紹:為什麼不推薦Python初學者直接看專案原始碼

本篇閱讀的程式碼實現了將一個列表向左或向右偏移指定位數的功能。

本篇閱讀的程式碼片段來自於30-seconds-of-python

offset

def offset(lst, offset):
  return lst[offset:] + lst[:offset]

# EXAMPLES
offset([1, 2, 3, 4, 5], 2) # [3, 4, 5, 1, 2]
offset([1, 2, 3, 4, 5], -2) # [4, 5, 1, 2, 3]

offset函式接收一個列表lst和一個偏移量offset,返回根據偏移量offset偏移後的列表。當偏移量為正的時候,向左移動;當偏移量為負的時候,向右移動。

函式使用列表的切片功能,將原列表根據偏移量分成兩個新列表,並將其按照新的順序組合成偏移後的新列表。

offset為正時,lst[offset:]表示從下標offset開始,到列表結尾的切片;lst[:offset]表示從列表開頭,到下標為offset前一個元素的切片。因為列表下標是從0開始計算的,所以列表前offset個元素移動到了列表的末尾,實現了列表向左移動offset個位數。

offset為負時,lst[offset:]表示從列表結尾倒數第offset個元素開始,到列表結尾的切片;lst[:offset]表示從列表開頭,到從列表結尾倒數第offset個元素的前一個元素的切片。也就是說當offset為負時,代表從列表結尾倒數第offset個元素,其他和offset為正時相同。所以列表最後offset個元素移動到了列表的開頭,實現了列表向左移動offset個位數。

相關文章