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

时间:2017-10-11 16:27:34

标签: python python-3.x list iterable-unpacking

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

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

但是,此操作会解压缩外部列表。 我想剥掉内部支架,但我还没有成功。 是否可以进行此类操作?

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

这就是我需要解压缩内部列表的原因;我想将VarList内容的list转换为某些内容的VarList,而不是list内容。

2 个答案:

答案 0 :(得分:1)

如果您想保留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)

答案 1 :(得分:1)

是的,这可以通过切片分配来实现:

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