You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求高效实现所有操作反转的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 15:20:37