在Python世界中,有許多小技巧可以對我們的代碼產生很大的影響。特別是對于大型程序,這些小技巧可以使我們的代碼更整潔和優(yōu)雅。 切片操作(slice operator)就是其中的一個。它可以幫助我們優(yōu)雅的從可迭代對象中獲取想要的元素,例如我們有一個如下的列表: a = [1,2,3,4,5,6] 如果我們想獲取列表 a 的奇數項該怎么寫? 正常來說可以編寫一個包含if-else語句的for循環(huán)語句過濾列表的元素,這個可行,就是多了許多不必要的代碼。 其實這個問題只需要一行代碼就可以解決:
沒有 for 循環(huán),沒有 if-else 語句,只需一行。這就是切片技術。 下面就將介紹5個有用的Python切片技巧。 切片運算符的模板在探索其用法之前,我們需要了解編寫切片(slice)運算符的模板: a_list[start:end:step] 如上所示,該操作包含三個參數:
了解了模板之后,現在讓我們看看這5個技巧是如何工作的。 1.獲取列表的前N個或后N個項目我們再次使用上一個列表作 a 為示例:
如何獲取前三個項?很簡單: a[:3] # 輸出: [1, 2, 3] 在上面的代碼中,start 從 0 開始,也就是該參數的默認值,所以我們就寫 end 索引是多少 那如何獲取后三個項目呢? 這里就用到了負數索引:
眾所周知,大多數編程語言都支持正索引,并且索引從0開始。 但是 Python 是個很特別的語言,它支持負索引。它從 -1 開始,換句話說,-1代表最后一個項目,-2代表倒數第二個項目,依此類推。 因此,當我們需要獲取列表的最后n個項目時,只需通過負索引即可獲取它。 2.取列表的第N個項目我們可以通過第三個參數步長(step), 更加靈活的處理切片任務,比如獲取列表的奇數項: a = [1, 2, 3, 4, 5, 6]a[::2] # 輸出 [1, 3, 5] 這里有個常用的小技巧就是通過它翻轉列表:
正步數是從列表頭開始,負步數就是從列表最后開始。 3.淺復制列表淺表復制的最簡單方法是使用以下切片技巧: a = [1, 2, 3, 4, 5, 6]b = a[:]b[0]=100print(b) # 輸出 [100, 2, 3, 4, 5, 6]print(a) # 輸出 [1, 2, 3, 4, 5, 6] 4. 一次操作多個列表元素如果我們需要處理列表中的多個元素,是否必須使用 for 循環(huán)? 并不一定,我們仍然可以通過切片運算符執(zhí)行某些任務,例如分配或刪除而無需for循環(huán)。我們來看一些例子: 一次刪除多個列表元素
調整列表大小 a = [1, 2, 3, 4, 5, 6]a[:4] = [7,8]print(a) # 輸出 [7, 8, 5, 6] 5.使用切片對象(Slice Object)存儲切片索引如果我們用相同的索引對許多列表進行切片,那么可能會有太多的數字,即使借助切片技巧,我們的代碼也會變得難看。像下面的代碼
更不用說如果所需的索引更改了,我們必須一一修改相應的索引。 一般來說,在一個程序中放入許多相同的數字不是一個好習慣。 這種情況下就可以使用切片對象(Slice Object)來存儲切片索引。 a = [1, 2, 3, 4, 5, 6]b = [3, 4, 5, 6, 7, 8, 9]c = [2, 3, 4, 5, 100, 101, 102]indexes = slice(1, 5, 2)a2 = a[indexes]b2 = b[indexes]c2 = c[indexes] 如上所示,內置的切片對象是一個簡單的輔助工具,可以幫助我們存儲三個數字并在需要時使用它。如果索引更改,我們只需要修改slice對象中的數字即可。 總結Python 為我們提供了一些語法糖,可以使我們的代碼更具可讀性和優(yōu)雅性。切片技術就是一個很好的例子。了解并應用這些小技巧可以極大地提高我們的代碼質量。 |
|