清除python中所有任意子列表列表中的所有元素

时间:2014-01-13 23:05:31

标签: python iterator

假设我们有一个如下所示的列表:

L = [0, 1, [2, [3, 4], 5], [6, 7]]

在不删除子列表的情况下,清除每个子列表中的所有元素的最佳方法是什么?例如,在这种情况下,返回值为:

>>> clearsublists(L)
[[[]], []]
编辑:有很多方法可以使用不稳定的字符串方法,例如将列表转换为字符串并计算符号'[','('和'{')出现的次数,但如果你这样做会搞砸有一个deques列表,例如,deque将显示为deque([]),使程序认为实际上只有一个子集,当它真的只有一个。

2 个答案:

答案 0 :(得分:4)

对于任意深度,请使用递归:

def clearsublists(L):
    return [clearsublists(l) for l in L if isinstance(l, list)]

答案 1 :(得分:2)

def clear(L):
    if not L:
        return []
    else:
        return [clear(i) for i in L if isinstance(i, list)]

输出:

>>> L = [0, 1, [2, [3, 4], 5], [6, 7]]
>>> clear(L)
[[[]], []]