From:https://www.jianshu.com/p/15715d6f4dad
在利用python解決各種實際問題的過程中,經常會遇到從某個對象中抽取部分值的情況,切片操作正是專門用于完成這一操作的有力武器。理論上而言,只要條件表達式得當,可以通過單次或多次切片操作實現任意切取目標值。切片操作的基本語法比較簡單,但如果不徹底搞清楚內在邏輯,也極容易產生錯誤,而且這種錯誤有時隱蔽得比較深,難以察覺。本文通過詳細例子總結歸納了切片操作的各種情況。若有錯誤和不足之處請大牛指正!
一、 Python可切片對象的索引方式
包括:正索引和負索引兩部分,如下圖所示,以a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]為例:
Python切片?python索引方式.jpg
二、 Python切片操作的一般方式
一個完整的切片表達式包含兩個“:”,用于分隔三個參數(start_index、end_index、step),當只有一個“:”時,默認第三個參數step=1。
step:正負數均可,其絕對值大小決定了切取數據時的‘‘步長”,而正負號決定了“切取方向”,正表示“從左往右”取值,負表示“從右往左”取值。當step省略時,默認為1,即從左往右以增量1取值。“切取方向非常重要!”“切取方向非常重要!”“切取方向非常重要!”,重要的事情說三遍!
start_index:表示起始索引(包含該索引本身);該參數省略時,表示從對象“端點”開始取值,至于是從“起點”還是從“終點”開始,則由step參數的正負決定,step為正從“起點”開始,為負從“終點”開始。
python切片負數,end_index:表示終止索引(不包含該索引本身);該參數省略時,表示一直取到數據“端點”,至于是到“起點”還是到“終點”,同樣由step參數的正負決定,step為正時直到“終點”,為負時直到“起點”。
三、 Python切片操作詳細例子
以下示例均以列表a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]為例:
1. 切取單個值
2. 切取完整對象
python切片語法、3. start_index和end_index全為正(+)索引的情況
4. start_index和end_index全為負(-)索引的情況
5. start_index和end_index正(+)負(-)混合索引的情況
6. 連續切片操作
7. 切片操作的三個參數可以用表達式
python有什么用,8. 其他對象的切片操作
前面的切片操作說明都以list為例進行說明,但實際上可進行的切片操作的數據類型還有很多,包括元組、字符串等等。
四、 常用切片操作
以列表:a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 為說明對象
1.取偶數位置
python和java,2.取奇數位置
3.拷貝整個對象
需要注意的是:[:]和.copy()都屬于“淺拷貝”,只拷貝最外層元素,內層嵌套元素則通過引用,而不是獨立分配內存。
4.修改單個元素
5.在某個位置插入元素
python切片函數,6.替換一部分元素
五、 總結
(一)start_index、end_index、step可同為正、同為負,也可正負混合使用。但必須遵循一個原則,否則無法正確切取到數據:當start_index的位置在end_index的左邊時,表示從左往右取值,此時step必須是正數(同樣表示從左往右);當start_index的位置在end_index的右邊時,表示從右往左取值,此時step必須是負數(同樣表示從右往左),即兩者的取值順序必須是相同的。對于特殊情況,當start_index或end_index省略時,起始索引和終止索引由step的正負來決定,不會存在取值方向出現矛盾的情況(即不會返回空列表[]),但正和負取到的結果是完全不同的,因為一個向左一個向右。
(二)在利用切片時,step的正負是必須要考慮的,尤其是當step省略時。比如a[-1:],很容易就誤認為是從“終點”開始一直取到“起點”,即a[-1:]= [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],但實際上a[-1:]=a[-1]=9,原因在于step=1表示從左往右取值,而起始索引start_index=-1本身就是對象的最右邊的元素了,再往右已經沒數據了,因此只有a[-1]一個元素
版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。
工作时间:8:00-18:00
客服电话
电子邮件
admin@qq.com
扫码二维码
获取最新动态