Skip to main content
 首页 » 编程设计

Python 展平列表(但不是所有的方式)

2025年05月04日14rubylouvre

我有一个列表的列表......

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() 只需要测试直到找到一个列表,而不是所有元素。