如何解压嵌套列表的内部列表?
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'>
。
此 VarList
由 deap.creator.create()
创建,并具有原始 list
所没有的附加属性。
如果我解压缩外部 VarList
,我将无法访问这些属性。
这就是我需要解压内部列表的原因;我想将某物的 list
的 VarList
变成某物的 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
假设我们有一个像 nested_list = [[1, 2]]
这样的嵌套列表,我们想要解压这个嵌套列表。
可以通过以下方式轻松完成(尽管这需要 Python 3.5+):
>>> nested_list = [[1, 2]]
>>> (*nested_list,)[0]
[1, 2]
但是,此操作会解压缩 outer 列表。 我想去掉内括号,但没有成功。 可以做这样的操作吗?
这个例子的动机可能不清楚,所以让我介绍一些背景。
在我的实际工作中,外部列表是 <class 'list'>
的扩展,比如 <class 'VarList'>
。
此 VarList
由 deap.creator.create()
创建,并具有原始 list
所没有的附加属性。
如果我解压缩外部 VarList
,我将无法访问这些属性。
这就是我需要解压内部列表的原因;我想将某物的 list
的 VarList
变成某物的 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