Python在列表中深度反转

时间:2012-06-02 01:30:11

标签: python list reverse

我有一个嵌套列表,我需要反转列表中的每个元素。但我不知道列表是否是列表列表与否。 例如:

p = [1, [2, 3, [4, [5, 6]]]]
print deep_reverse(p)
#>>> [[[[6, 5], 4], 3, 2], 1]

q =  [1, [2,3], 4, [5,6]]
print deep_reverse(q)
#>>> [ [6,5], 4, [3, 2], 1]

到目前为止我所拥有的是:

def is_list(p):
    return isinstance(p, list)

def deep_reverse(a):
    a.reverse()
    for i in a:
        if is_list(i):
            i.reverse()
            print a

它适用于第二次测试,q测试,但是第一次测试的测试工作正常。 我不确定是否需要使用递归来循环整个事情?我该如何修改我的代码?感谢。

10 个答案:

答案 0 :(得分:8)

嗯...如果只有一种方法可以深刻反转所有的子列表......

** **眨眼

答案 1 :(得分:4)

def deep_reverse(lst):
    try:
        if len(lst) > 1:
            return list(deep_reverse(item) for item in reversed(lst))
        return lst
    except TypeError:
        return lst

答案 2 :(得分:4)

您的代码不起作用的原因是,如果i是列表列表,则deep_reverse内的列表不会i

您只需将代码的一行更改为以下内容:

def is_list(p):
    return isinstance(p, list)

def deep_reverse(a):
    a.reverse()
    for i in a:
        if is_list(i):
            deep_reverse(i)  # <=== This is what changed
            print a

答案 3 :(得分:1)

def deep_reverse(L):
    if L == []:
        return L
    elif type(L) == int:
        return L
    else:
        return deep_reverse(L[1:]) + [deep_reverse(L[0])]

>>> print deep_reverse(p)
[[[[6, 5], 4], 3, 2], 1]

>>> print deep_reverse(q)
[[6, 5], 4, [3, 2], 1]

希望这有帮助

答案 4 :(得分:1)

>>> def deep_reverse(L):
        for item in reversed(L):
            if isinstance(item,list):
                yield list(deep_reverse(item))
            else:
                yield item


>>> p = [1, [2, 3, [4, [5, 6]]]]
>>> q =  [1, [2,3], 4, [5,6]]
>>> list(deep_reverse(p))
[[[[6, 5], 4], 3, 2], 1]
>>> list(deep_reverse(q))
[[6, 5], 4, [3, 2], 1]

答案 5 :(得分:1)

这是正确的解决方案

def is_list(p):
    return isinstance(p, list)

def deep_reverse(p):

 if p==[]:
    return p

 if not is_list(p[0]):
    return deep_reverse(p[1:])+[p[0]]

 else:
    return deep_reverse(p[1:])+[deep_reverse(p[0])]

答案 6 :(得分:0)

def deep_reverse(ls):  
    for i in ls:  
        if type(i)==list:deep_reverse(i)  
    ls.reverse()  

答案 7 :(得分:0)

这是一个建议:

def deep_reverse(lst):
    if isinstance(lst ,list):
        if sum(1 for x in lst if isinstance(x, list)) == 0:
                        lst = lst[::-1]
                        return lst
        else :
            lst = lst[::-1]
            lst = [deep_reverse(item) for item in lst]     
            return lst
    else:
         return lst

答案 8 :(得分:0)

def is_list(p):
    return isinstance(p, list)

def deep_reverse(p):

 if p==[]:
    return p

 if not is_list(p):
    return p
 else:
    return deep_reverse(p[1:])+[deep_reverse(p[0])]

测试好。

答案 9 :(得分:0)

最优雅:

def deep_reverse(L):
    """ assumes L is a list of lists whose elements are ints
    Mutates L such that it reverses its elements and also 
    reverses the order of the int elements in every element of L. 
    It does not return anything.
    """
    # Your code here
    for i in L:
        try:
            deep_reverse(i)
        except:
            pass
    L.reverse()