|
| 1 | +from typing import Any, Iterable, List, Union |
| 2 | + |
| 3 | + |
1 | 4 | class DoublyLinkedList: |
2 | 5 | """ |
3 | 6 | A linked list is a series of node objects, each with a link (object reference) to the next node in the series. |
@@ -147,7 +150,7 @@ def count(self, value) -> int: |
147 | 150 | return sum([1 for node_value in self if node_value == value]) |
148 | 151 |
|
149 | 152 | @property |
150 | | - def difference(self) -> []: |
| 153 | + def difference(self) -> [Any]: |
151 | 154 | """ |
152 | 155 | differences between each value |
153 | 156 |
|
@@ -212,8 +215,15 @@ def _remove_node(self, node: Node): |
212 | 215 | else: |
213 | 216 | self.head = node.next_node |
214 | 217 |
|
215 | | - def __getitem__(self, index: int): |
216 | | - return self._node_at_index(index).value |
| 218 | + def __getitem__(self, index: Union[int, Iterable[int], slice]) -> Union[Any, List[Any]]: |
| 219 | + if isinstance(index, int): |
| 220 | + return self._node_at_index(index).value |
| 221 | + elif isinstance(index, Iterable): |
| 222 | + return [self.__getitem__(value) for value in index] |
| 223 | + elif isinstance(index, slice): |
| 224 | + return self.__getitem__(range(*(value for value in (index.start, index.stop, index.step) if value is not None))) |
| 225 | + else: |
| 226 | + raise ValueError(f'unrecognized index: {index}') |
217 | 227 |
|
218 | 228 | def __setitem__(self, index: int, value): |
219 | 229 | self._node_at_index(index).value = value |
|
0 commit comments