如何不递归遍历嵌套列表获取指定元素所属的直接上层容器
你给出的示例代码如下:
l = ['x', [[1, [2, 3], 4]], 'y'] my_container = l[1] my_ele = my_container[0]
结论
原生Python场景下没有办法不遍历嵌套列表直接获取元素的直接上层容器,核心原因有两个:
- Python中的对象本身不会存储指向持有它的上层容器的引用信息,同一个对象可以同时被多个不同容器引用,没有内置属性会记录它被哪些容器持有、对应位置是什么。
- 你示例中的
my_ele和my_container只是两个指向不同内存对象的变量,二者没有内置的绑定关系可供直接查询。
如果有强需求要实现不遍历就查询上层容器,可以自行封装自定义容器类,给元素挂载反向引用,简单示例如下:
class ListWithParent: def __init__(self, data, parent=None): self.parent = parent self.data = [] for item in data: if isinstance(item, list): # 嵌套的列表也用自定义类封装,同时绑定父容器 self.data.append(ListWithParent(item, parent=self)) else: self.data.append(item) def __getitem__(self, idx): return self.data[idx] # 用自定义类初始化你的嵌套列表 l = ListWithParent(['x', [[1, [2, 3], 4]], 'y']) my_container = l[1] my_ele = my_container[0] # 直接通过parent属性获取上层容器 print(my_ele.parent is my_container) # 输出为True
注意上述方案仅适用于你自行封装的嵌套结构,原生Python列表没有该能力,对于原生列表最终还是只能通过递归/迭代遍历整个嵌套结构匹配元素,来查找对应的上层容器。
内容的提问来源于stack exchange,提问作者Ashutosh
相关产品推荐
相关产品推荐

