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

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

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

一、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]) # 指定切片的開(kāi)始和結(jié)束位置
print(alist[0:100]) # 切片位置大于列表長(zhǎng)度時(shí),從列表尾部截?cái)?
print(alist[100:]) # 切片開(kāi)始位置大于列表長(zhǎng)度時(shí),返回空列表
alist[len(alist):]=[9] # 在列表尾部增加元素
print(alist)
alist[:0] = [1,2] # 前面的0省略了,相當(dāng)于是alist[0:0] = [1,2]
print(alist) ? ? ?# 在列表的頭部增加元素
alist[3:3] =[4] # 在列表中間插入元素
print(alist)
alist[:3] = [1,2] # 相當(dāng)于是alist[0:3] = [1,2] 替換列表元素
alist[3:] = [4,5,6] # 替換元素,結(jié)果按照兩邊的最短元素來(lái)決定.
print(alist)
alist[:3] = [] ?# 刪除列表中前三個(gè)元素
del alist[:3] # 切片元素連續(xù)
del alist[::2] # 隔一個(gè)刪除一個(gè),切片元素不連續(xù)

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

 Python 中對(duì)序列的切片訪問(wèn)默認(rèn)為左閉右開(kāi),現(xiàn)自定義實(shí)現(xiàn)為左閉右閉。

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

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import numbers
?
"""
舉個(gè)例子:新建類并修改其實(shí)例的切片訪問(wèn)
? ? Python 中對(duì)序列的切片訪問(wèn),是左閉右開(kāi)。
? ? 現(xiàn)需要:
? ? ? ? 創(chuàng)建一個(gè)可被迭代的類(如果要實(shí)現(xiàn)這個(gè)功能,就要遵循 python 的相關(guān)的協(xié)議。所謂的協(xié)議就是一些約定內(nèi)容。例如,如果要將一個(gè)類要實(shí)現(xiàn)迭代,可以實(shí)現(xiàn)__iter__() 或者 __getitem__()其中一個(gè)方法)
? ? ? ? 改變默認(rèn)的切片訪問(wèn)方式為左閉右閉
? ? ? ? 舉例: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
?
? ? # 實(shí)現(xiàn)了這個(gè)魔法函數(shù),就可以是獲取類中某個(gè)可迭代元素的下標(biāo)的元素,也可以使其成為一個(gè)可迭代對(duì)象
? ? def __getitem__(self, item):
? ? ? ? # 使用相對(duì)編碼,進(jìn)行類型獲取
? ? ? ? cls = type(self)
? ? ? ? # 判斷傳遞進(jìn)來(lái)的是slice類型還是int類型,返回不同的類型和操作
? ? ? ? if isinstance(item, slice):
? ? ? ? ? ? # 左閉右閉的關(guān)鍵實(shí)現(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]])
?
? ? # 返回容器的長(zhǎng)度。可變和不可變?nèi)萜鞫家獙?shí)現(xiàn)它,這是協(xié)議的一部分
? ? def __len__(self):
? ? ? ? return len(self.__sequence_list)
?
? ? # 實(shí)現(xiàn)該魔法函數(shù),可以使這個(gè)類成為一個(gè)可迭代的對(duì)象:對(duì)象實(shí)現(xiàn)了一個(gè)__iter__方法,這個(gè)方法負(fù)責(zé)返回一個(gè)迭代器
? ? def __iter__(self):
? ? ? ? return iter(self.__sequence_list)
? ? # 迭代器:內(nèi)部實(shí)現(xiàn)了next(python3.x為_(kāi)_next__)方法,真正負(fù)責(zé)迭代的實(shí)現(xiàn)。當(dāng)?shù)鲀?nèi)的元素用盡之后,任何的進(jìn)一步調(diào)用都之后觸發(fā) StopIteration 異常,所以迭代器需要一個(gè)__iter__方法來(lái)返回自身
? ? 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 實(shí)現(xiàn)自定義切片類為左閉右閉詳情的文章就介紹到這了,更多相關(guān)Python自定義切片內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Opencv python 圖片生成視頻的方法示例

    Opencv python 圖片生成視頻的方法示例

    這篇文章主要介紹了Opencv python 圖片生成視頻的方法示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • 用Python做一個(gè)久坐提醒小助手的示例代碼

    用Python做一個(gè)久坐提醒小助手的示例代碼

    這篇文章主要介紹了用Python做一個(gè)久坐提醒小助手的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-02-02
  • Python實(shí)現(xiàn)歷史記錄功能(實(shí)際案例)

    Python實(shí)現(xiàn)歷史記錄功能(實(shí)際案例)

    很多應(yīng)用程序都有瀏覽用戶的歷史記錄的功能,瀏覽器可以查看最近訪問(wèn)過(guò)的網(wǎng)頁(yè),現(xiàn)在我們制作了一個(gè)簡(jiǎn)單的猜數(shù)字的小游戲,添加歷史記錄功能,顯示用戶最近猜過(guò)的數(shù)字,如何實(shí)現(xiàn)呢?跟隨小編一起看看吧
    2022-04-04
  • Ubuntu16.04/樹(shù)莓派Python3+opencv配置教程(分享)

    Ubuntu16.04/樹(shù)莓派Python3+opencv配置教程(分享)

    下面小編就為大家分享一篇Ubuntu16.04/樹(shù)莓派Python3+opencv配置教程。具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-04-04
  • python命令行參數(shù)用法實(shí)例分析

    python命令行參數(shù)用法實(shí)例分析

    這篇文章主要介紹了python命令行參數(shù)用法,結(jié)合實(shí)例形式分析了Python基于optparse模塊處理命令行參數(shù)相關(guān)使用技巧,需要的朋友可以參考下
    2019-06-06
  • Python 按比例獲取樣本數(shù)據(jù)或執(zhí)行任務(wù)的實(shí)現(xiàn)代碼

    Python 按比例獲取樣本數(shù)據(jù)或執(zhí)行任務(wù)的實(shí)現(xiàn)代碼

    這篇文章主要介紹了Python 按比例獲取樣本數(shù)據(jù)或執(zhí)行任務(wù),本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-12-12
  • Python采用raw_input讀取輸入值的方法

    Python采用raw_input讀取輸入值的方法

    這篇文章主要介紹了Python采用raw_input讀取輸入值的方法,對(duì)初學(xué)者有很好的學(xué)習(xí)借鑒價(jià)值,需要的朋友可以參考下
    2014-08-08
  • 用Python監(jiān)控NASA TV直播畫(huà)面的實(shí)現(xiàn)步驟

    用Python監(jiān)控NASA TV直播畫(huà)面的實(shí)現(xiàn)步驟

    本文分享一個(gè)名為"Spacestills"的開(kāi)源程序,它可以用于查看 NASA TV 的直播畫(huà)面(靜止幀)
    2021-05-05
  • 利用Python制作百度圖片下載器

    利用Python制作百度圖片下載器

    這篇文章主要介紹了利用Python制作的一個(gè)百度圖片下載器,可以顯示實(shí)時(shí)的下載進(jìn)度,文中的示例代碼講解詳細(xì),感興趣的可以跟隨小編學(xué)習(xí)一下
    2022-01-01
  • Python+threading模塊對(duì)單個(gè)接口進(jìn)行并發(fā)測(cè)試

    Python+threading模塊對(duì)單個(gè)接口進(jìn)行并發(fā)測(cè)試

    這篇文章主要為大家詳細(xì)介紹了Python+threading模塊對(duì)單個(gè)接口進(jìn)行并發(fā)測(cè)試,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-06-06

最新評(píng)論