欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python中切片操作的示例詳解

 更新時(shí)間:2022年11月25日 11:14:23   作者:盆友圈的小可愛(ài)  
在剛學(xué)python時(shí)候,我們都知道字符串(String)、列表(list)和元組(tuple)序列化數(shù)據(jù)類(lèi)型支持切片操作。本文我們將對(duì)熟悉的切片操作進(jìn)行系統(tǒng)學(xué)習(xí),感興趣的可以了解一下

1. 前言

在剛學(xué)python時(shí)候,我們都知道字符串(String)、列表(list)和元組(tuple)序列化數(shù)據(jù)類(lèi)型支持切片操作。

# slice operation
TUPLE = (1,2,3,4)
LIST = [1,2,3,4]
STRING = "1234"

print("TUPLE[1:3]:",TUPLE[1:3])
print("LIST[1:3]:",LIST[1:3])
print("STRING[1:3]:",STRING[1:3])

# output
TUPLE[1:3]: (2, 3)
LIST[1:3]: [2, 3]
STRING[1:3]: 23

通過(guò)上述例子,我們可以快速使用“區(qū)間”的方式截取到想要的數(shù)據(jù)。那么最后一位始終都沒(méi)有取到?接下來(lái),我們對(duì)熟悉的切片操作進(jìn)行系統(tǒng)學(xué)習(xí)。

2. 什么是切片

2.1 切片概述

Python 序列數(shù)據(jù)類(lèi)型索引從左到右開(kāi)始是從0開(kāi)始,依次加+1;諾從右到左索引從-1開(kāi)始,依次加-1。

在Python 中訪問(wèn)子序列/字符串,使用方括號(hào)[]來(lái)截取指定的子序列/字符串。例如在列表中要元素2和3,則切片截取為L(zhǎng)IST[1:3]

2.2 忽略最后一位元素

在Python中,進(jìn)行切片操作會(huì)不包含最后一位元素,這一風(fēng)格是與C語(yǔ)言等語(yǔ)言保存以索引位置從0開(kāi)始的做法。

切片忽略最后一位元素會(huì)有以下好處:

當(dāng)切片操作只給出最后一位時(shí),可以直接明了看到截取的子序列的長(zhǎng)度。例如LIST[:2]中包含兩個(gè)元素

根據(jù) Edsger W. Dijkstar 解釋?zhuān)饕恢脧?開(kāi)始比從1開(kāi)始優(yōu)勢(shì),元素的序數(shù)(下標(biāo))等于序列中它之前的元素?cái)?shù)。切片長(zhǎng)度計(jì)算方式可以直接(stop-start)計(jì)算出

同時(shí),指定任何一個(gè)索引位置x,可以對(duì)序列切割成不重疊的兩個(gè)子序列LIST[:x]和LIST[x:]。

 >>> LIST = [1,2,3,4] 
>>> LIST[:2] # 直接可以知道截取子序列為2
[1, 2]
>>> LIST[2:] # 將LIST在索引位置2處切片
[3, 4]
>>> 

3. 切片原理

切片操作是使用方括號(hào) [] 進(jìn)行運(yùn)算的。其格式為 [start:stop:step]。對(duì)象在start和stop區(qū)間中取出間隔step的元素。step可以取負(fù)數(shù)。

>>> LIST[1:4:2] 
[2, 4]
>>> LIST[-1:-4:-1] 
[4, 3, 2]
>>> LIST[::-1] 
[4, 3, 2, 1]
>>> LIST[::-2] 
[4, 2]
>>>

start:stop:step 形式在方括號(hào)[]內(nèi),使用索引下標(biāo)計(jì)算后,返回一個(gè)切片對(duì)象:slice(start,stop,step)

當(dāng)序列進(jìn)行seq[start:stop:step]分片計(jì)算時(shí),Python會(huì)調(diào)用seq.getitem(slice(start,stop,step))方法以元組的形式接收[]方括號(hào)索引。

查看Python內(nèi)置 slice() 方法屬性,有三個(gè)start、stop和step數(shù)據(jù)屬性和indices方法

>>> slice  
<class 'slice'>
>>> dir(slice) 
['__class__', '__delattr__', '__dir__', '__doc__', '__eq__', 
'__format__', '__ge__', '__getattribute__', '__gt__',
 '__hash__', '__init__', '__init_subclass__', '__le__', 
 '__lt__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', 
 '__repr__', '__setattr__', '__sizeof__', '__str__', 
'__subclasshook__', 'indices', 'start', 'step', 'stop']
>>>

根據(jù)當(dāng)序列調(diào)用slice方法后,會(huì)先執(zhí)行Seq.indices(len)方法計(jì)算出序列Seq從開(kāi)始start和結(jié)束stop位置,步數(shù)step。當(dāng)超出邊界時(shí),會(huì)截掉。

>>> slice(None,5,1).indices(2) #1
(0, 2, 1)
>>> slice(-3,None,None).indices(2) #2
(0, 2, 1)
>>>

#1 seq[:5:1] 等于 seq[0:2:1]

#2 seq[-3:] 等于 seq[0:2:1]

切片其實(shí)還可以支持使用逗號(hào)分開(kāi)多個(gè)索引,例如第三庫(kù)Numpy庫(kù)就是使用這個(gè)特性。

4. 切片賦值

將序列進(jìn)行切片操作后得到切片對(duì)象可以進(jìn)行賦值,但是必須遵循以下條件:

切片做為對(duì)象,那么等號(hào)右邊必須是一個(gè)可迭代的對(duì)象

即使切片里只有一個(gè)值,也要轉(zhuǎn)換成可迭代的序列

否則的話,系統(tǒng)會(huì)拋出TypeError

>>> LIST = [1,2,3,4,5]
>>> LIST[1:4] = 23
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: can only assign an iterable
>>>

5. 切片計(jì)算

在Python中,切片對(duì)象可以進(jìn)行 “+”或“*”運(yùn)算,以達(dá)到拼接組合成新的切片對(duì)象。

通過(guò) "+" 連接的是兩個(gè)同類(lèi)型序列,兩個(gè)序列拼接后序列不會(huì)發(fā)生改變,Python內(nèi)部會(huì)重新創(chuàng)建新的序列

>>> LIST = [1,2,3,4]
>>> LIST2 = [5,6,7]
>>> LIST + LIST2
[1, 2, 3, 4, 5, 6, 7]
>>> s1 = "Jue"    
>>> s2 = "Jin" 
>>> s1 + s2
'JueJin'

通過(guò)“Seq*n”,可以將原數(shù)據(jù)類(lèi)型復(fù)制n份,然后再拼接起來(lái)組合新的序列

>>> LIST = [1,2,3,4]
>>> LIST * 3
[1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4]
>>> s1 = "Jue"       
>>> s1 * 3
'JueJueJue'

以上案例中,都是針對(duì)元素是不可變的數(shù)據(jù)類(lèi)型進(jìn)行復(fù)制操作的,那么元素是可變數(shù)據(jù)類(lèi)型進(jìn)行復(fù)制會(huì)發(fā)生什么樣呢?

例如我們要?jiǎng)?chuàng)建一個(gè)二維的列表,長(zhǎng)度為3??赡芸旖莸膶?xiě)法如下:

>>> LIST = [["_"]]*3 
>>> LIST
[['_'], ['_'], ['_']]

但是對(duì)坐標(biāo)0,0進(jìn)行賦值,發(fā)現(xiàn)3個(gè)元素都發(fā)生變化

>>> LIST[0][0] = 1
>>> LIST
[[1], [1], [1]]

這個(gè)和我們實(shí)際想要的效果不一樣,我們需要得到是列表中每一個(gè)元素之間都是獨(dú)立的,那么我們寫(xiě)法上要與上述有區(qū)別的

>>> LIST = [["_"] for i in range(3)] 
>>> LIST
[['_'], ['_'], ['_']]
>>> LIST[0][0] = 1
>>> LIST
[[1], ['_'], ['_']]
>>>

為什么兩種寫(xiě)法差距這么大,原因在于第一種寫(xiě)法雖然看上去和寫(xiě)法二一樣,但是寫(xiě)法一初始化時(shí)候,是得到元素都是引用,都指向同一個(gè)列表。當(dāng)我們對(duì)其中一個(gè)元素進(jìn)行賦值時(shí),另外兩個(gè)也會(huì)跟著變化。

6. 總結(jié)

本期,對(duì) Python 關(guān)于序列、字符串常用到的切片操作,進(jìn)行深入學(xué)習(xí)。切片操作原理在于Python內(nèi)部會(huì)通過(guò)__getitem__()方法調(diào)用slice對(duì)象,然后slice對(duì)象通過(guò)indices(len)方法算出切片的長(zhǎng)度。哪怕遇到缺失索引和負(fù)數(shù)索引,以及長(zhǎng)度超過(guò)目標(biāo)序列的切片都可以優(yōu)雅地進(jìn)行處理。

到此這篇關(guān)于Python中切片操作的示例詳解的文章就介紹到這了,更多相關(guān)Python切片操作內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python通過(guò)文本和圖片生成詞云圖

    Python通過(guò)文本和圖片生成詞云圖

    這篇文章主要介紹了Python通過(guò)文本和圖片生成詞云圖,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-05-05
  • jupyter notebook中新建cell的方法與快捷鍵操作

    jupyter notebook中新建cell的方法與快捷鍵操作

    這篇文章主要介紹了jupyter notebook中新建cell的方法與快捷鍵操作,具有很好的參考價(jià)值,希望對(duì)有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-04-04
  • 用python登錄Dr.com思路以及代碼分享

    用python登錄Dr.com思路以及代碼分享

    如今一般的大學(xué)校園或者公寓都是通過(guò)客戶端來(lái)限制路由器使用,基本上都是Dr.com客戶端,有的是登錄樣式,有的是插件樣式。下面我們來(lái)說(shuō)說(shuō)python定制自己的客戶端
    2014-06-06
  • Python pandas 重命名索引和列名稱(chēng)的實(shí)現(xiàn)

    Python pandas 重命名索引和列名稱(chēng)的實(shí)現(xiàn)

    本文主要介紹了Python pandas 重命名索引和列名稱(chēng)的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-07-07
  • python實(shí)現(xiàn)的發(fā)郵件功能示例

    python實(shí)現(xiàn)的發(fā)郵件功能示例

    這篇文章主要介紹了python實(shí)現(xiàn)的發(fā)郵件功能,結(jié)合實(shí)例形式分析了Python使用網(wǎng)易郵箱發(fā)送郵件的相關(guān)操作技巧,需要的朋友可以參考下
    2019-09-09
  • Python輕松讀寫(xiě)TOML文件實(shí)現(xiàn)示例

    Python輕松讀寫(xiě)TOML文件實(shí)現(xiàn)示例

    這篇文章主要介紹了Python輕松讀寫(xiě)TOML文件實(shí)現(xiàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2024-01-01
  • Python HTMLTestRunner可視化報(bào)告實(shí)現(xiàn)過(guò)程解析

    Python HTMLTestRunner可視化報(bào)告實(shí)現(xiàn)過(guò)程解析

    這篇文章主要介紹了Python HTMLTestRunner可視化報(bào)告實(shí)現(xiàn)過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-04-04
  • python數(shù)據(jù)寫(xiě)入列表并導(dǎo)出折線圖

    python數(shù)據(jù)寫(xiě)入列表并導(dǎo)出折線圖

    這篇文章主要介紹了python數(shù)據(jù)寫(xiě)入列表并導(dǎo)出折線圖,文章以舉例展開(kāi)對(duì)文章主題的介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-01-01
  • Python中的字典與成員運(yùn)算符初步探究

    Python中的字典與成員運(yùn)算符初步探究

    這篇文章主要介紹了Python中的字典與成員運(yùn)算符初步探究,是Python入門(mén)學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下
    2015-10-10
  • Python使用BeautifulSoup庫(kù)解析網(wǎng)頁(yè)

    Python使用BeautifulSoup庫(kù)解析網(wǎng)頁(yè)

    在Python的網(wǎng)絡(luò)爬蟲(chóng)中,網(wǎng)頁(yè)解析是一項(xiàng)重要的技術(shù)。而在眾多的網(wǎng)頁(yè)解析庫(kù)中,BeautifulSoup庫(kù)憑借其簡(jiǎn)單易用而廣受歡迎,在本篇文章中,我們將學(xué)習(xí)BeautifulSoup庫(kù)的基本用法,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步
    2023-08-08

最新評(píng)論