最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python3 實現(xiàn)自定義切片類為左閉右閉詳情

 更新時間:2022年06月21日 15:18:25   作者:if 0 = -I can  
這篇文章主要介紹了python3 實現(xiàn)自定義切片類為左閉右閉詳情,文章圍繞主題展開詳細的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下

一、Python 切片的一些用法

alist = [3,4,5,6,7,9,11,13,15,17]
print(alist[::]) # 返回包含原列表中所有元素的新列表
print(alist[::-1]) # 返回原列表的逆序排列
print(alist[::2]) # 返回原列表的偶數(shù)位數(shù)據(jù)
print(alist[1::2]) # 獲取奇數(shù)位置的數(shù)據(jù)
print(alist[3:6]) # 指定切片的開始和結(jié)束位置
print(alist[0:100]) # 切片位置大于列表長度時,從列表尾部截斷
print(alist[100:]) # 切片開始位置大于列表長度時,返回空列表
alist[len(alist):]=[9] # 在列表尾部增加元素
print(alist)
alist[:0] = [1,2] # 前面的0省略了,相當于是alist[0:0] = [1,2]
print(alist) ? ? ?# 在列表的頭部增加元素
alist[3:3] =[4] # 在列表中間插入元素
print(alist)
alist[:3] = [1,2] # 相當于是alist[0:3] = [1,2] 替換列表元素
alist[3:] = [4,5,6] # 替換元素,結(jié)果按照兩邊的最短元素來決定.
print(alist)
alist[:3] = [] ?# 刪除列表中前三個元素
del alist[:3] # 切片元素連續(xù)
del alist[::2] # 隔一個刪除一個,切片元素不連續(xù)

二、自定義實現(xiàn)一個可切片的序列類

 Python 中對序列的切片訪問默認為左閉右開,現(xiàn)自定義實現(xiàn)為左閉右閉。

自定義序列的相關(guān)魔法方法允許我們自己創(chuàng)建的類擁有序列的特性,讓其使用起來就像 Python 的內(nèi)置序列(dict,tuple,list,string 等)。
 如果要實現(xiàn)這個功能,就要遵循 python 的相關(guān)的協(xié)議。所謂的協(xié)議就是一些約定內(nèi)容。例如,如果要將一個類要實現(xiàn)迭代,可以實現(xiàn) __iter__() 或者 __getitem__() 其中一個方法。
例子:自定義一個可以被切片的 SequenceNew 類:

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import numbers
?
"""
舉個例子:新建類并修改其實例的切片訪問
? ? Python 中對序列的切片訪問,是左閉右開。
? ? 現(xiàn)需要:
? ? ? ? 創(chuàng)建一個可被迭代的類(如果要實現(xiàn)這個功能,就要遵循 python 的相關(guān)的協(xié)議。所謂的協(xié)議就是一些約定內(nèi)容。例如,如果要將一個類要實現(xiàn)迭代,可以實現(xiàn)__iter__() 或者 __getitem__()其中一個方法)
? ? ? ? 改變默認的切片訪問方式為左閉右閉
? ? ? ? 舉例:c1=youclassname([0,1,2,3,4,5,6,7,8,9])
? ? ? ? c1[2:7] 返回2,3,4,5,6,7
"""
?
class SequenceNew(object):
?
? ? def __init__(self, sequence_list):
? ? ? ? self.__sequence_list = sequence_list
? ? ? ? self.__list_index = 0
?
? ? # 實現(xiàn)了這個魔法函數(shù),就可以是獲取類中某個可迭代元素的下標的元素,也可以使其成為一個可迭代對象
? ? def __getitem__(self, item):
? ? ? ? # 使用相對編碼,進行類型獲取
? ? ? ? cls = type(self)
? ? ? ? # 判斷傳遞進來的是slice類型還是int類型,返回不同的類型和操作
? ? ? ? if isinstance(item, slice):
? ? ? ? ? ? # 左閉右閉的關(guān)鍵實現(xiàn):[item.start : item.stop : item.step] 。即:class slice(start, stop[, step])
? ? ? ? ? ? return cls(sequence_list = self.__sequence_list[item.start : item.stop + 1])
? ? ? ? elif isinstance(item, numbers.Integral):
? ? ? ? ? ? return cls(sequence_list = [self.__sequence_list[item]])
?
? ? # 返回容器的長度。可變和不可變?nèi)萜鞫家獙崿F(xiàn)它,這是協(xié)議的一部分
? ? def __len__(self):
? ? ? ? return len(self.__sequence_list)
?
? ? # 實現(xiàn)該魔法函數(shù),可以使這個類成為一個可迭代的對象:對象實現(xiàn)了一個__iter__方法,這個方法負責返回一個迭代器
? ? def __iter__(self):
? ? ? ? return iter(self.__sequence_list)
? ? # 迭代器:內(nèi)部實現(xiàn)了next(python3.x為__next__)方法,真正負責迭代的實現(xiàn)。當?shù)鲀?nèi)的元素用盡之后,任何的進一步調(diào)用都之后觸發(fā) StopIteration 異常,所以迭代器需要一個__iter__方法來返回自身
? ? def __next__(self):
? ? ? ? try:
? ? ? ? ? ? i = self.__sequence_list[self.__list_index]
? ? ? ? except IndexError:
? ? ? ? ? ? raise StopIteration
? ? ? ? self.__list_index += 1
? ? ? ? return i
sn = SequenceNew([0,1,2,3,4,5,6,7,8,9])
print([ i for i in sn[2:7]])

以下是輸出結(jié)果:

[2, 3, 4, 5, 6, 7]

到此這篇關(guān)于python3 實現(xiàn)自定義切片類為左閉右閉詳情的文章就介紹到這了,更多相關(guān)Python自定義切片內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • python3啟動web服務(wù)引發(fā)的一系列問題匯總

    python3啟動web服務(wù)引發(fā)的一系列問題匯總

    由于行內(nèi)交付的機器已自帶python3 ,沒有采取自行安裝python3,但是運行python腳本時報沒有tornado module,遇到這樣的問題如何處理呢,下面小編給大家介紹下python3啟動web服務(wù)引發(fā)的一系列問題匯總,感興趣的朋友一起看看吧
    2023-02-02
  • python中的錯誤處理

    python中的錯誤處理

    異常是指程序中的例外,違例情況。異常機制是指程序出現(xiàn)錯誤后,程序的處理方法。當出現(xiàn)錯誤后,程序的執(zhí)行流程發(fā)生改變,程序的控制權(quán)轉(zhuǎn)移到異常處理。
    2016-04-04
  • Python中的文件定位方式

    Python中的文件定位方式

    這篇文章主要介紹了Python中的文件定位方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • Django Highcharts制作圖表

    Django Highcharts制作圖表

    Highcharts圖表控件是目前使用最為廣泛的圖表控件 ,是純JS圖表庫。這篇文章主要介紹了Django Highcharts制作圖表的相關(guān)資料,非常的詳細,有需要的小伙伴可以來參考下
    2016-08-08
  • 在django中圖片上傳的格式校驗及大小方法

    在django中圖片上傳的格式校驗及大小方法

    今天小編就為大家分享一篇在django中圖片上傳的格式校驗及大小方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-07-07
  • Python手搓郵件發(fā)送客戶端

    Python手搓郵件發(fā)送客戶端

    這篇文章主要為大家詳細介紹了如何使用Python手搓郵件發(fā)送客戶端,支持發(fā)送郵件,附件,定時發(fā)送以及個性化郵件正文,感興趣的可以了解下
    2025-01-01
  • python日志通過不同的等級打印不同的顏色(示例代碼)

    python日志通過不同的等級打印不同的顏色(示例代碼)

    這篇文章主要介紹了python日志通過不同的等級打印不同的顏色,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-01-01
  • python裝飾器練習題及答案

    python裝飾器練習題及答案

    這篇文章主要介紹了python裝飾器練習題及答案,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-11-11
  • 簡單談?wù)凱ython面向?qū)ο蟮南嚓P(guān)知識

    簡單談?wù)凱ython面向?qū)ο蟮南嚓P(guān)知識

    由于馬上就要期末考試了,正在抓緊時間復習 所以這一篇就拖了很久,抱歉啦~ 今天會說說: 屬性私有,方法私有,重寫,魔術(shù)方法,需要的朋友可以參考下
    2021-01-01
  • 基于Python實現(xiàn)m3u8視頻下載

    基于Python實現(xiàn)m3u8視頻下載

    m3u8?是一種基于文本的媒體播放列表文件格式,通常用于指定流媒體播放器播放在線媒體流,本文將利用Python實現(xiàn)m3u8視頻下載器,感興趣的可以了解一下
    2023-05-05

最新評論

屏边| 道真| 巴马| 怀仁县| 图木舒克市| 吕梁市| 赤城县| 望江县| 乐平市| 色达县| 古蔺县| 临沧市| 武隆县| 余姚市| 营口市| 萨迦县| 民县| 壤塘县| 丰顺县| 台东市| 多伦县| 蒙城县| 太仆寺旗| 慈利县| 宜黄县| 昌吉市| 明光市| 城口县| 平顺县| 根河市| 尖扎县| 乃东县| 惠州市| 保定市| 渝中区| 长垣县| 平舆县| 兴义市| 高州市| 托里县| 普兰店市|