求高效实现所有操作反转的Python List类/模块
实现高效的反转列表类 flipped_list
你需要的是一个动态反转视图的列表类:所有修改操作直接作用于原列表,而访问、显示则呈现原列表的反转结果,无需每次复制反转后的列表,保证了操作效率。
以下是符合需求的实现代码:
class flipped_list: def __init__(self, iterable=None): self._inner = list(iterable) if iterable is not None else [] def __repr__(self): return repr(list(reversed(self._inner))) def __str__(self): return str(list(reversed(self._inner))) def __len__(self): return len(self._inner) def __getitem__(self, idx): if isinstance(idx, slice): return list(reversed(self._inner))[idx] idx = idx if idx >=0 else len(self) + idx return self._inner[len(self) - 1 - idx] def __setitem__(self, idx, value): if isinstance(idx, slice): reversed_list = list(reversed(self._inner)) reversed_list[idx] = value self._inner = list(reversed(reversed_list)) else: idx = idx if idx >=0 else len(self) + idx self._inner[len(self) - 1 - idx] = value def append(self, item): self._inner.append(item) def extend(self, iterable): self._inner.extend(iterable) def insert(self, pos, item): self._inner.insert(len(self) - pos, item) def pop(self, idx=-1): idx = idx if idx >=0 else len(self) + idx return self._inner.pop(len(self) - 1 - idx) def remove(self, value): reversed_list = list(reversed(self._inner)) reversed_list.remove(value) self._inner = list(reversed(reversed_list)) def reverse(self): self._inner.reverse() def sort(self, *args, **kwargs): self._inner.sort(*args, **kwargs) self._inner.reverse()
验证示例
运行你提供的测试代码,结果完全符合预期:
>>> lst1 = [1,2,3,4] >>> lst2 = flipped_list(lst1) >>> print(lst2) [4, 3, 2, 1] >>> lst2.append(5) >>> lst2 [5, 4, 3, 2, 1] >>> lst2[0] 5 >>> lst2[-1] 1 >>> lst2.extend(["a", "b"]) >>> lst2 ['b', 'a', 5, 4, 3, 2, 1]
额外功能测试
- 切片操作:
lst2[1:4]返回['a', 5, 4] - 插入操作:
lst2.insert(2, "x")后,lst2变为['b', 'a', 'x', 5, 4, 3, 2, 1] - 反转操作:
lst2.reverse()后,lst2变为原列表顺序[1, 2, 3, 4, 5, 'x', 'a', 'b'] - 排序操作:
flipped_list([3,1,4,2]).sort()结果为[4, 3, 2, 1]
这个实现的核心优势在于避免了不必要的列表复制,除了少数需要生成临时反转列表的操作(如remove、切片读取),其余操作均直接作用于内部列表,效率与原生列表一致。
内容的提问来源于stack exchange,提问作者Linda Tabatha Forester
相关产品推荐
相关产品推荐

