假设我们有一个像nested_list = [[1, 2]]
这样的嵌套列表,我们想要解压缩这个嵌套列表。
它可以通过以下方式轻松完成(虽然这需要Python 3.5 +):
>>> nested_list = [[1, 2]]
>>> (*nested_list,)[0]
[1, 2]
但是,此操作会解压缩外部列表。 我想剥掉内部支架,但我还没有成功。 是否可以进行此类操作?
这个例子的动机可能不清楚,所以让我介绍一些背景知识。
在我的实际工作中,外部列表是<class 'list'>
的扩展名,例如<class 'VarList'>
。
此VarList
由deap.creator.create()
创建,并具有原始list
没有的其他属性。
如果我解压缩外部VarList
,我将无法访问这些属性。
这就是我需要解压缩内部列表的原因;我想将VarList
内容的list
转换为某些内容的VarList
,而不是list
内容。
答案 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