[英]Python flatten list (but not all the way)
我有一個清單清單清單...
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()
僅需要測試,直到找到列表為止,而不是所有元素。
A = [ [[1,3]], [[3,5], [4,4], [[5,3]]] ]
print [child[0] if isinstance(child[0], list) else child for item in A for child in item]
輸出量
[[1, 3], [3, 5], [4, 4], [5, 3]]
注意:此解決方案僅用於此問題。 這不是通用的列表拼合解決方案。
同樣的想法,使用itertools.chain
from itertools import chain
print [item[0] if isinstance(child[0], list) else item for item in chain(*A)]
輸出量
[[1, 3], [3, 5], [4, 4], [5, 3]]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.