什么';我的Python代码有什么问题?I';I’我正在尝试对列表输入进行深度反转

什么';我的Python代码有什么问题?I';I’我正在尝试对列表输入进行深度反转,python,Python,例如: def is_list(p): return isinstance(p, list) def deep_reverse(list): o=[] for i in reversed(list): if is_list(i)==True: print i deep_reverse(i) o.append(i) return o 换线 p = [1, [2, 3, [

例如:

def is_list(p):

    return isinstance(p, list)


def deep_reverse(list):

    o=[]
    for i in reversed(list):

        if is_list(i)==True:
            print i
            deep_reverse(i)

        o.append(i)

    return o
换线

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

顺便提一下,编写此函数的较短方法是:

        i = deep_reverse(i)

首先,当您递归时,您实际上从未使用返回值
deep\u reverse
做过任何事情。您的代码只是在做:
p[:-1]
@AshwiniChaudhary:但这不是它试图做的(
p[:-1]
不会给出所需的
[[6,5],4],3,2],1]
)@AshwiniChaudhary:我不明白这有什么帮助,因为OP知道这不是他想要的。如果错误的版本没有逆转任何东西,你会说“你的代码只是在做
p
”?@PaulSeeb——通常,人们认为使用
isinstance([],list)
type([])is list更“pythonic”。这样做的原因是,
isinstance
也将传递子类,但是
type is
习惯用法不会传递,或者,就duck类型而言,
isinstance
稍微更ducky:)请注意,这会创建一个副本,这可能是您想要的,也可能不是您想要的。如果你想在适当的位置反转列表,你需要一个不同的解决方案。@sr2222:我不认为OP试图在适当的位置反转列表,否则他不会让行
打印深\u reverse(p)
(除非目的是在适当的位置反转列表并返回新列表,我认为这是一种误导行为)@DavidRobinson对于精通Python(或许多其他语言)的人来说是令人困惑的。是的,但我看到了很多人提出的问题,他们希望就地操作返回
self
。OP还把另一个函数封装在<代码> iStase<代码>中,我见过的最有经验的Python程序员会考虑冗余…@ SR2222:在任何情况下,OP在函数中使用了
反向
并创建了一个全新的列表
o
,这一事实充分表明他没有寻找就地解决方案。值得对列表进行标准测试。>如果类型(lst)为列表:
        i = deep_reverse(i)
def deep_reverse(lst):
    if not is_list(lst):
        return lst
    return map(deep_reverse, reversed(lst))