4 3 實現可切片的物件

2022-09-18 23:15:09 字數 3117 閱讀 4351

1

#!/user/bin/env python2#

-*- coding:utf-8 -*-34

#模式[start:end:step]

5"""

6其中,第乙個數字start表示切片開始位置,預設為0;

7第二個數字end表示切片截止(但不包含)位置(預設為列表長度);

8第三個數字step表示切片的步長(預設為1)。

9當start為0時可以省略,當end為列表長度時可以省略,

10當step為1時可以省略,並且省略步長時可以同時省略最後乙個冒號。

11另外,當step為負整數時,表示反向切片,這時start應該比end的值要大才行。

12"""

13 alist = [3, 4, 5, 6, 7, 9, 11, 13, 15, 17]14#

返回包含原列表中所有元素的新列表

15print

(alist[::])16#

返回包含原列表中所有元素的逆序列表

17print(alist[::-1])18#

隔乙個取乙個,獲取偶數字置的元素

19print(alist[::2])20#

隔乙個取乙個,獲取奇數字置的元素

21print(alist[1::2])22#

指定切片的開始和結束位置

23print(alist[3:6])24#

切片結束位置大於列表長度時,從列表尾部截斷

25 alist[0:100]26#

切片開始位置大於列表長度時,返回空列表

27 alist[100:]

2829

#在列表尾部增加元素

30 alist[len(alist):] = [9]31#

在列表頭部插入元素

32 alist[:0] = [1, 2]33#

在列表中間位置插入元素

34 alist[3:3] = [4]35#

替換列表元素,等號兩邊的列表長度相等

36 alist[:3] = [1, 2]37#

等號兩邊的列表長度也可以不相等

38 alist[3:] = [4, 5, 6]39#

隔乙個修改乙個

40 alist[::2] = [0] * 3

41print

(alist)42#

隔乙個修改乙個

43 alist[::2] = ['

a', '

b', 'c'

]44#左側切片不連續,等號兩邊列表長度必須相等

45 alist[::2] = [1,2]46#

刪除列表中前3個元素

47 alist[:3] =

4849

#切片元素連續

50del alist[:3]51#

切片元素不連續,隔乙個刪乙個

52del alist[::2]

上述是切片常用的操作,下面**將實現乙個可切片的物件

1

#!/user/bin/env python2#

-*- coding:utf-8 -*-

3import

numbers45

6class

group:

7"""

8支援切片操作

9"""

10def

__init__

(self, group_name, company_name, staffs):

11 self.group_name =group_name

12 self.company_name =company_name

13 self.staffs =staffs

1415

def__reversed__

(self):

16"""

17倒序

18"""

19self.staffs.reverse()

2021

def__getitem__

(self, item):

22"""

23實現這個函式之後,就可以進行切片操作

24"""

25 cls =type(self)

26if

isinstance(item, slice):

27return cls(group_name=self.group_name, company_name=self.company_name, staffs=self.staffs[item])

28elif

isinstance(item, numbers.integral):

29return cls(group_name=self.group_name, company_name=self.company_name, staffs=[self.staffs[item]])

3031

def__len__

(self):

32return

len(self.staffs)

3334

def__iter__

(self):

35"""

36實現可迭代

37"""

38return

iter(self.staffs)

3940

def__contains__

(self, item):

41"""

42if 'zy' in group:

43print('yes')

44"""

45if item in

self.staffs:

46return

true

47else:48

return

false

4950

51 staffs = ['

zy1', '

zy2', '

zy3'

]52 group = group(group_name='

user

', company_name='

imooc

', staffs=staffs)

53print(len(group))

實現可切片的物件

ist序列的切片說明 模式 start end step 其中,第乙個數字start表示切片開始位置,預設為0 第二個數字end表示切片截止 但不包含 位置 預設為列表長度 第三個數字step表示切片的步長 預設為1 當start為0時可以省略,當end為列表長度時可以省略,當step為1時可以省略...

5 4 實現可切片的物件

list序列的切片說明 模式 start end step 其中,第乙個數字start表示切片開始位置,預設為0 第二個數字end表示切片截止 但不包含 位置 預設為列表長度 第三個數字step表示切片的步長 預設為1 當start為0時可以省略,當end為列表長度時可以省略,當step為1時可以省...

python切片的物件 Python切片物件和

python中是否存在某種內部機制,它以不同的方式處理傳遞給 getitem 的引數,並自動將start stop step構造轉換為片?在 這是我的意思class exampleclass object def getitem self,args return args def call self...