我有一个列表的列表......
A = [ [[1,3]], [[3,5], [4,4], [[5,3]]] ]
以下函数输出[1, 3, 3, 5, 4, 4, 5, 3]
def flatten(a):
b = []
for c in a:
if isinstance(c, list):
b.extend(flatten(c))
else:
b.append(c)
return b
但是,我想在最后一层停止展平,以便得到 [ [1,3], [3,5], [4,4], [5,3] ]
请您参考如下方法:
您可以在展平之前测试包含的列表:
def flatten(a):
b = []
for c in a:
if isinstance(c, list) and any(isinstance(i, list) for i in c):
b.extend(flatten(c))
else:
b.append(c)
return b
演示:
>>> def flatten(a):
... b = []
... for c in a:
... if isinstance(c, list) and any(isinstance(i, list) for i in c):
... b.extend(flatten(c))
... else:
... b.append(c)
... return b
...
>>> A = [ [[1,3]], [[3,5], [4,4], [[5,3]]] ]
>>> flatten(A)
[[1, 3], [3, 5], [4, 4], [5, 3]]
这试图在这种情况下尽可能高效; any() 只需要测试直到找到一个列表,而不是所有元素。
