1 """A more or less complete user-defined wrapper around list objects."""
5 class UserList(collections
.MutableSequence
):
6 def __init__(self
, initlist
=None):
8 if initlist
is not None:
9 # XXX should this accept an arbitrary sequence?
10 if type(initlist
) == type(self
.data
):
11 self
.data
[:] = initlist
12 elif isinstance(initlist
, UserList
):
13 self
.data
[:] = initlist
.data
[:]
15 self
.data
= list(initlist
)
16 def __repr__(self
): return repr(self
.data
)
17 def __lt__(self
, other
): return self
.data
< self
.__cast
(other
)
18 def __le__(self
, other
): return self
.data
<= self
.__cast
(other
)
19 def __eq__(self
, other
): return self
.data
== self
.__cast
(other
)
20 def __ne__(self
, other
): return self
.data
!= self
.__cast
(other
)
21 def __gt__(self
, other
): return self
.data
> self
.__cast
(other
)
22 def __ge__(self
, other
): return self
.data
>= self
.__cast
(other
)
23 def __cast(self
, other
):
24 if isinstance(other
, UserList
): return other
.data
26 def __cmp__(self
, other
):
27 return cmp(self
.data
, self
.__cast
(other
))
28 def __contains__(self
, item
): return item
in self
.data
29 def __len__(self
): return len(self
.data
)
30 def __getitem__(self
, i
): return self
.data
[i
]
31 def __setitem__(self
, i
, item
): self
.data
[i
] = item
32 def __delitem__(self
, i
): del self
.data
[i
]
33 def __getslice__(self
, i
, j
):
34 i
= max(i
, 0); j
= max(j
, 0)
35 return self
.__class
__(self
.data
[i
:j
])
36 def __setslice__(self
, i
, j
, other
):
37 i
= max(i
, 0); j
= max(j
, 0)
38 if isinstance(other
, UserList
):
39 self
.data
[i
:j
] = other
.data
40 elif isinstance(other
, type(self
.data
)):
41 self
.data
[i
:j
] = other
43 self
.data
[i
:j
] = list(other
)
44 def __delslice__(self
, i
, j
):
45 i
= max(i
, 0); j
= max(j
, 0)
47 def __add__(self
, other
):
48 if isinstance(other
, UserList
):
49 return self
.__class
__(self
.data
+ other
.data
)
50 elif isinstance(other
, type(self
.data
)):
51 return self
.__class
__(self
.data
+ other
)
53 return self
.__class
__(self
.data
+ list(other
))
54 def __radd__(self
, other
):
55 if isinstance(other
, UserList
):
56 return self
.__class
__(other
.data
+ self
.data
)
57 elif isinstance(other
, type(self
.data
)):
58 return self
.__class
__(other
+ self
.data
)
60 return self
.__class
__(list(other
) + self
.data
)
61 def __iadd__(self
, other
):
62 if isinstance(other
, UserList
):
63 self
.data
+= other
.data
64 elif isinstance(other
, type(self
.data
)):
67 self
.data
+= list(other
)
70 return self
.__class
__(self
.data
*n
)
72 def __imul__(self
, n
):
75 def append(self
, item
): self
.data
.append(item
)
76 def insert(self
, i
, item
): self
.data
.insert(i
, item
)
77 def pop(self
, i
=-1): return self
.data
.pop(i
)
78 def remove(self
, item
): self
.data
.remove(item
)
79 def count(self
, item
): return self
.data
.count(item
)
80 def index(self
, item
, *args
): return self
.data
.index(item
, *args
)
81 def reverse(self
): self
.data
.reverse()
82 def sort(self
, *args
, **kwds
): self
.data
.sort(*args
, **kwds
)
83 def extend(self
, other
):
84 if isinstance(other
, UserList
):
85 self
.data
.extend(other
.data
)
87 self
.data
.extend(other
)