如何解压嵌套列表的内部列表?

How to unpack inner lists of a nested list?

假设我们有一个像 nested_list = [[1, 2]] 这样的嵌套列表,我们想要解压这个嵌套列表。 可以通过以下方式轻松完成(尽管这需要 Python 3.5+):

>>> nested_list = [[1, 2]]
>>> (*nested_list,)[0]
[1, 2]

但是,此操作会解压缩 outer 列表。 我想去掉内括号,但没有成功。 可以做这样的操作吗?

这个例子的动机可能不清楚,所以让我介绍一些背景。 在我的实际工作中,外部列表是 <class 'list'> 的扩展,比如 <class 'VarList'>。 此 VarListdeap.creator.create() 创建,并具有原始 list 所没有的附加属性。 如果我解压缩外部 VarList,我将无法访问这些属性。

这就是我需要解压内部列表的原因;我想将某物的 listVarList 变成某物的 VarList,而不是某物的 list

如果您想保留 VarList 的身份和属性,请尝试在赋值的左侧使用切片运算符,如下所示:

class VarList(list):
    pass

nested_list = VarList([[1,2]])
nested_list.some_obscure_attribute = 7
print(nested_list)

# Task: flatten nested_list while preserving its object identity and,
# thus, its attributes

nested_list[:] = [item for sublist in nested_list for item in sublist]

print(nested_list)
print(nested_list.some_obscure_attribute)

是的,这可以通过切片赋值实现:

>>> nested_list = [[1, 2]]
>>> id(nested_list)
140737100508424
>>> nested_list[:] = nested_list[0]
>>> id(nested_list)
140737100508424