什么';我的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))