如果实现了一个对象,它包含列表或自定义数据结构,如何对它进行切片呢?
首先,定义自定义数据结构类
# -*- coding: utf-8 -*- __author__ = 'songhao' from collections import Sequence class MyList(Sequence): """ 实现 Mylist 基本操作,删除,添加,切片,返回值 """ def __init__(self, data): self.data = data def __str__(self): return str(self.data) def __repr__(self): return str(self.data) def __len__(self): return len(self.data) def append(self, item): self.data.append(item) def remove(self, item): self.data.remove(item) def __<span class="wp_keywordlink_affiliate"><a href="https://www.168seo.cn/tag/getitem" title="View all posts in getitem" target="_blank">getitem</a></span>__(self, sliced): return self.data[sliced] if __name__ == '__main__': my = MyList([1, 2, 3]) print(my) my.append("heloo") my.remove(3) print(my) print(my[-1])
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
|
# -*- coding: utf-8 -*-
__author__
=
'songhao'
from
collections
import
Sequence
class
MyList
(
Sequence
)
:
"""
实现 Mylist 基本操作,删除,添加,切片,返回值
"""
def
__init__
(
self
,
data
)
:
self
.
data
=
data
def
__str__
(
self
)
:
return
str
(
self
.
data
)
def
__repr__
(
self
)
:
return
str
(
self
.
data
)
def
__len__
(
self
)
:
return
len
(
self
.
data
)
def
append
(
self
,
item
)
:
self
.
data
.
append
(
item
)
def
remove
(
self
,
item
)
:
self
.
data
.
remove
(
item
)
def
__getitem__
(
self
,
sliced
)
:
return
self
.
data
[
sliced
]
if
__name__
==
'__main__'
:
my
=
MyList
(
[
1
,
2
,
3
]
)
print
(
my
)
my
.
append
(
"heloo"
)
my
.
remove
(
3
)
print
(
my
)
print
(
my
[
-
1
]
)
|
结果是:
这里声明了一个类,它包含了一个作为数据结构的列表。MyStructure实际上没有实现太多内容,但已经可以添加、删除、获取项了。要留意的是__getitem__方法。任何时候需要从结构中获取一个项时都可以调用此方法。当调用structure[0]时,实际上调用的时__getitem__方法,并返回该方法所返回的内容。在实现列表样式的对象时,这是很有用的。
现在创建自定义对象,添向其中添加一个项:
In [1]: from c4 import MyList In [2]: m = MyList([1,2,3]) In [3]: m Out[3]: <c4.MyList at 0x10ca39da0> In [4]: m.append(2222) In [5]: print(m) [1, 2, 3, 2222] In [6]: m.remove(1) In [7]: m[-1] Out[7]: 2222 In [10]: m[:3] Out[10]: [2, 3, 2222] 很简单 实现了切片的操作
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
In
[
1
]
:
from
c4
import
MyList
In
[
2
]
:
m
=
MyList
(
[
1
,
2
,
3
]
)
In
[
3
]
:
m
Out
[
3
]
:
<
c4
.
MyList
at
0x10ca39da0
>
In
[
4
]
:
m
.
append
(
2222
)
In
[
5
]
:
print
(
m
)
[
1
,
2
,
3
,
2222
]
In
[
6
]
:
m
.
remove
(
1
)
In
[
7
]
:
m
[
-
1
]
Out
[
7
]
:
2222
In
[
10
]
:
m
[
:
3
]
Out
[
10
]
:
[
2
,
3
,
2222
]
很简单
实现了切片的操作
|