亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Python切片操作深入詳解

 更新時(shí)間:2018年07月27日 11:20:15   作者:混沌鱷魚(yú)  
這篇文章主要介紹了Python切片操作,結(jié)合實(shí)例形式詳細(xì)深入的分析了Python切片操作的原理、參數(shù)屬性、相關(guān)函數(shù)及操作注意事項(xiàng),需要的朋友可以參考下

本文實(shí)例講述了Python切片操作。分享給大家供大家參考,具體如下:

我們基本上都知道Python的序列對(duì)象都是可以用索引號(hào)來(lái)引用的元素的,索引號(hào)可以是正數(shù)由0開(kāi)始從左向右,也可以是負(fù)數(shù)由-1開(kāi)始從右向左。

在Python中對(duì)于具有序列結(jié)構(gòu)的數(shù)據(jù)來(lái)說(shuō)都可以使用切片操作,需注意的是序列對(duì)象某個(gè)索引位置返回的是一個(gè)元素,而切片操作返回是和被切片對(duì)象相同類(lèi)型對(duì)象的副本。

如下面的例子,雖然都是一個(gè)元素,但是對(duì)象類(lèi)型是完全不同的:

>>> alist = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> alist[0]
0
>>> alist[0:1]
[0]

通常一個(gè)切片操作要提供三個(gè)參數(shù) [start_index:  stop_index:  step]

start_index是切片的起始位置
stop_index是切片的結(jié)束位置(不包括)
step可以不提供,默認(rèn)值是1,步長(zhǎng)值不能為0,不然會(huì)報(bào)錯(cuò)ValueError。

當(dāng) step 是正數(shù)時(shí),以list[start_index]元素位置開(kāi)始, step做為步長(zhǎng)到list[stop_index]元素位置(不包括)為止,從左向右截取,

start_indexstop_index不論是正數(shù)還是負(fù)數(shù)索引還是混用都可以,但是要保證 list[stop_index]元素的【邏輯】位置

必須在list[start_index]元素的【邏輯】位置右邊,否則取不出元素。

比如下面的幾個(gè)例子都是合法的:

>>> alist = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> alist[1:5]
[1, 2, 3, 4]
>>> alist[1:-1]
[1, 2, 3, 4, 5, 6, 7, 8]
>>> alist[-8:6]
[2, 3, 4, 5]

當(dāng) step 是負(fù)數(shù)時(shí),以list[start_index]元素位置開(kāi)始, step做為步長(zhǎng)到list[stop_index]元素位置(不包括)為止,從右向左截取,

start_indexstop_index不論是正數(shù)還是負(fù)數(shù)索引還是混用都可以,但是要保證 list[stop_index]元素的【邏輯】位置

必須在list[start_index]元素的【邏輯】位置左邊,否則取不出元素。

比如下面的幾個(gè)例子都是合法的:

>>> alist = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> alist[-1: -5: -1]
[9, 8, 7, 6]
>>> alist[9: 5: -1]
[9, 8, 7, 6]
>>> alist[-1:1:-1]
[9, 8, 7, 6, 5, 4, 3, 2]
>>> alist[6:-8:-1]
[6, 5, 4, 3]

假設(shè)list的長(zhǎng)度(元素個(gè)數(shù))是length, start_indexstop_index在符合虛擬的邏輯位置關(guān)系時(shí),

start_indexstop_index的絕對(duì)值是可以大于length的。比如下面兩個(gè)例子:

>>> alist = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> alist[-11:11]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> alist[11:-11:-1]
[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]

另外start_indexstop_index都是可以省略的,比如這樣的形式 alist[:], 被省略的默認(rèn)由其對(duì)應(yīng)左右邊界起始元素開(kāi)始截取。

看一下具體的實(shí)例:

>>> alist = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> alist[:]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

Python中切片操作的實(shí)現(xiàn)機(jī)制

(注:Python中前后雙下劃線名字的方法(函數(shù))叫特殊方法,也有稱(chēng)魔術(shù)方法的,這是從ruby那里借用的。

通常特殊方法都是應(yīng)當(dāng)由解釋器去調(diào)用的,對(duì)程序員的接口通常是看起來(lái)更簡(jiǎn)潔的方式,如常見(jiàn)的 len(list)

實(shí)質(zhì)是解釋器調(diào)用list.__len__()方法。)

實(shí)際上在Python中對(duì)list引用元素和形式優(yōu)雅簡(jiǎn)潔的切片操作都是由解釋器調(diào)用的list.__getitem__(x)特殊方法。

>>> help(list.__getitem__)
Help on method_descriptor:
__getitem__(...)
  x.__getitem__(y) <==> x[y]

其中x可以是個(gè)整數(shù)對(duì)象或切片對(duì)象。

alist[5]alist.__getitem__(5) 是完全等效的。

>>> alist[5]
5
>>> alist.__getitem__(5)
5
>>>

而切片操作是把切片對(duì)象作參數(shù)調(diào)用__getitem__(),

>>> help(slice)
Help on class slice in module builtins:
class slice(object)
 | slice(stop)
 | slice(start, stop[, step])
 |
 | Create a slice object. This is used for extended slicing (e.g. a[0:10:2]).

見(jiàn)下面的例子。

>>> alist[1:7:2]
[1, 3, 5]
>>> slice_obj = slice(1,7,2)
>>> alist.__getitem__(slice_obj)
[1, 3, 5]
>>>

一些常用的切片操作

>>> alist = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
# 取前一部分
>>> alist[:5]
[0, 1, 2, 3, 4]
# 取后一部分
>>> alist[-5:]
[5, 6, 7, 8, 9]
# 取偶數(shù)位置元素
>>> alist[::2]
[0, 2, 4, 6, 8]
# 取奇數(shù)位置元素
>>> alist[1::2]
[1, 3, 5, 7, 9]
# 淺復(fù)制,等價(jià)于list.copy()更加面向?qū)ο蟮膶?xiě)法
>>> blist = alist[:]
>>> blist
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
# 返回一個(gè)逆序列表,推薦reversed(list)的寫(xiě)法,更直觀易懂。
>>> alist[::-1]
[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
# 在某個(gè)位置插入多個(gè)元素
>>> alist[3:3] = ['a','b','c']
>>> alist
[0, 1, 2, 'a', 'b', 'c', 3, 4, 5, 6, 7, 8, 9]
# 在開(kāi)始位置之前插入多個(gè)元素
>>> alist = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> alist[:0] = ['a','b','c']
>>> alist
['a', 'b', 'c', 0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
# 替換多個(gè)元素
>>> alist = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> alist[0:3] = ['a','b','c']
>>> alist
['a', 'b', 'c', 3, 4, 5, 6, 7, 8, 9]
# 刪除切片
>>> alist = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> del alist[3:6]
>>> alist
[0, 1, 2, 6, 7, 8, 9]

從上面這些實(shí)例可以看到Python的切片操作非常靈活、強(qiáng)大、簡(jiǎn)潔、優(yōu)雅,如果能全面掌握和正確運(yùn)用將會(huì)對(duì)你的編寫(xiě)Python代碼水平會(huì)有很大提升。

更多關(guān)于Python相關(guān)內(nèi)容感興趣的讀者可查看本站專(zhuān)題:《Python數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Python函數(shù)使用技巧總結(jié)》、《Python字符串操作技巧匯總》、《Python入門(mén)與進(jìn)階經(jīng)典教程》及《Python文件與目錄操作技巧匯總

希望本文所述對(duì)大家Python程序設(shè)計(jì)有所幫助。

相關(guān)文章

  • PyQt5 界面顯示無(wú)響應(yīng)的實(shí)現(xiàn)

    PyQt5 界面顯示無(wú)響應(yīng)的實(shí)現(xiàn)

    這篇文章主要介紹了PyQt5 界面顯示無(wú)響應(yīng)的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-03-03
  • python3 pandas 讀取MySQL數(shù)據(jù)和插入的實(shí)例

    python3 pandas 讀取MySQL數(shù)據(jù)和插入的實(shí)例

    下面小編就為大家分享一篇python3 pandas 讀取MySQL數(shù)據(jù)和插入的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-04-04
  • Python序列循環(huán)移位的3種方法推薦

    Python序列循環(huán)移位的3種方法推薦

    下面小編就為大家分享一篇Python序列循環(huán)移位的3種方法推薦,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-04-04
  • Python可視化神器pyecharts繪制折線圖詳情

    Python可視化神器pyecharts繪制折線圖詳情

    這篇文章主要介紹了Python可視化神器pyecharts繪制折線圖詳情,折線圖和柱狀圖一樣是我們?nèi)粘?梢暬疃嗟囊粋€(gè)圖例,當(dāng)然它的優(yōu)勢(shì)和適用場(chǎng)景相信大家肯定不陌生,要想快速的得出趨勢(shì),抓住趨勢(shì)二字,就會(huì)很快的想到要用折線圖來(lái)表示了
    2022-07-07
  • 使用Kivy將python程序打包為apk文件

    使用Kivy將python程序打包為apk文件

    本文給大家分享的是使用Kivy將python程序打包為apk文件的方法,包括安裝步驟及相關(guān)代碼,有需要的小伙伴可以參考下
    2017-07-07
  • Python中使用遍歷在列表中添加字典遇到的坑

    Python中使用遍歷在列表中添加字典遇到的坑

    今天小編就為大家分享一篇關(guān)于Python中使用遍歷在列表中添加字典遇到的坑,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2019-02-02
  • Python IDLE 錯(cuò)誤:IDLE''''s subprocess didn''''t make connection 的解決方案

    Python IDLE 錯(cuò)誤:IDLE''''s subprocess didn''''t make connectio

    這篇文章主要介紹了Python IDLE 錯(cuò)誤:IDLE's subprocess didn't make connection 的解決方案的相關(guān)資料,需要的朋友可以參考下
    2017-02-02
  • Python 模擬購(gòu)物車(chē)的實(shí)例講解

    Python 模擬購(gòu)物車(chē)的實(shí)例講解

    下面小編就為大家?guī)?lái)一篇Python 模擬購(gòu)物車(chē)的實(shí)例講解。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-09-09
  • 使用Python進(jìn)行物聯(lián)網(wǎng)設(shè)備的控制與數(shù)據(jù)收集

    使用Python進(jìn)行物聯(lián)網(wǎng)設(shè)備的控制與數(shù)據(jù)收集

    Python作為一種高效且易于學(xué)習(xí)的編程語(yǔ)言,已經(jīng)成為開(kāi)發(fā)物聯(lián)網(wǎng)應(yīng)用的首選語(yǔ)言之一,本文將探討如何使用Python進(jìn)行物聯(lián)網(wǎng)設(shè)備的控制與數(shù)據(jù)收集,并提供相應(yīng)的代碼示例,需要的朋友可以參考下
    2024-05-05
  • python字符串和常用數(shù)據(jù)結(jié)構(gòu)知識(shí)總結(jié)

    python字符串和常用數(shù)據(jù)結(jié)構(gòu)知識(shí)總結(jié)

    在本文中我們系統(tǒng)的給大家整理了關(guān)于python字符串和常用數(shù)據(jù)結(jié)構(gòu)的相關(guān)知識(shí)點(diǎn)以及實(shí)例代碼,需要的朋友們學(xué)習(xí)下。
    2019-05-05

最新評(píng)論