基本上,我正在尝试的是,当列表包含一个单独的项目时,我是否可以将嵌套列表展平,这是另一个列表。以下面的数据结构为例:
[['a', 'b', 'c', [['d', 'e', 'f']]]]理想的数据格式应该是:
['a', 'b', 'c', ['d', 'e', 'f']]这种嵌套可以达到任何级别的深度,但只需要将单个列表数据展平即可。有人知道怎么做吗?我在SO上得到的最接近的答案是:Flattening a list recursively,但这把列表完全拉平了。
发布于 2018-12-06 07:21:08
您可以使用一个递归函数来专门测试给定列表中是否只有一个项目,以及该项目是否是一个列表,如果是,则跳过生成该列表:
def simplify(l):
if len(l) == 1 and isinstance(l[0], list):
yield from simplify(l[0])
else:
for i in l:
yield list(simplify(i)) if isinstance(i, list) else i因此:
list(simplify([['a', 'b', 'c', [['d', 'e', 'f']]]]))返回:
['a', 'b', 'c', ['d', 'e', 'f']]发布于 2018-12-06 07:21:01
递归函数可以做到这一点:
def flatten(l: list):
if len(l) == 1:
if isinstance(l[0], list):
l = l[0]
for i, elem in enumerate(l):
if isinstance(type(elem), list):
l[i] = flatten(elem)
return lhttps://stackoverflow.com/questions/53642222
复制相似问题